Oracle視圖(view)創建使用
視圖是一張虛擬表,其內容由查詢定義,同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。(視圖不是真實存在磁盤上的)
一、視圖與表的區別
1、表需要占用磁盤空間,視圖不需要
2、視圖不能添加索引(所以查詢速度略微慢點)
3、使用視圖可以簡化,復雜查詢
4、視圖的使用利於提高安全性
比如:不同用戶查看不同視圖
創建,修改,刪除視圖的基本操作
二、創建視圖
語法結構:
CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW 視圖名
AS
SELECT查詢 (需要查詢的結果)
[WITH READ ONLY CONSTRAINT] (設置是否可以對視圖進行增刪改查)
語法解析:
1. OR REPLACE:如果視圖已經存在,則替換舊視圖。
2. FORCE:即使基表不存在,也可以創建該視圖,但是該視圖不能正常使用,當基表創建成功后,視圖才能正常使用。
3. NOFORCE:如果基表不存在,無法創建視圖,該項是默認選項。
4. WITH READ ONLY:默認可以通過視圖對基表執行增刪改操作,但是有很多在基表上的限制(比如:基表中某列不能為空,但是該列沒有出現在視圖中,則不能通過視圖執行insert操作),WITH READ ONLY說明視圖是只讀視圖,不能通過該視圖進行增刪改操作。現實開發中,基本上不通過視圖對表中的數據進行增刪改操作。
三、刪除視圖
1、drop view 視圖名
四、查詢視圖
查詢視圖和正常sql是一樣的
Oracle 創建視圖時報錯,報ora-01031:insufficient privileges
在創建用戶的時候如果直接給用戶DBA權限,那么在B用戶中可以直接查詢A用戶的表,但是在創建視圖時就會報無權限,在這種情況下需要再在被訪問的A用戶里面去給予要訪問該表的B用戶授權。
--創建視圖權限,一般網上找都是說的這句,但是光有這句還是無法創建
grant create view to B;
--授予查詢權限
grant select any table to B;
--授予權限
grant select any dictionary to B;
以上3項地后就能正常創建視圖了。