標籤:
視圖是儲存的查詢定義。
1. 建立視圖的文法如下:
Create [OR REPLACE] [FORCE | NOFORCE] VIEW view_name[(alias,alias,...)] AS
select_statement [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY];
其中: OR REPLACE 表示在該視圖存在的話,將重新建立該視圖。
FORCE 使用此關鍵字,則無論基表是否存在,都將建立視圖。
NOFORCE 這是預設值。如果使用此關鍵字,則僅當基表存在時才建立視圖。
view_name 表示要建立視圖的名稱。
alias 指定在視圖裡面列的名字,名字數目必須與視圖所選擇的運算式的數目相匹配。
select_statement 表示Select語句。
WITH CHECK OPTION 此選項指定只能插入或更新視圖可以訪問的行。術語constraint表示為CHECK OPTION約束指定的名稱。不能更新建立視圖的條件。
WITH READ ONLY 此選項確保不能在此視圖上執行任何修改操作。
樣本7:示範建立一個名為ven_view的視圖,該視圖與vendor_master表具有相同的結構。
Create VIEW ven_view AS select * from vendor_master;
視圖中的ORDER BY子句:以便在查詢檢視時即使不使用Order By子句,結果集也會按指定的順序排列行。
樣本8:Create OR REPLACE VIEW ven_view(編號,日期) AS select orderno,odate from vendor_master order by venname;
2.建立帶有錯誤的視圖:使用FORCE選項
在以下情況下,Oracle也會建立視圖:
1》視力定義的查詢引用了一個不存在的表;
2》視圖定義的查詢引用了現有表中無效的列;
3》視圖的所有者沒有所需的許可權。
樣本9:下面建立一個基於venmast的視圖。但資料庫中並不存在名為"venmast"的表。
Create FORCE VIEW ven AS select * from venmast;
如果稍後建立名為venmast的表,可以使用ALTER VIEW ven COMPILE;
3. 聯結視圖:
樣本:示範如何建立聯結視圖
Create OR REPLACE VIEW ven_ord_view AS select vm.vencode,venname,orderno,odate,ostatus
from vendor_master vm,order_master om where vm.vencode=om.vencode;
鍵保留表:在聯結視圖中,如果視圖包含了一個表的主鍵,並且也是這個視圖的主鍵,則這個鍵被保留,則這個表被稱為鍵保留表。
ven_ord_view視圖以vendor_master和order_master這兩個表為基表。order_master表被視為鍵保留表,因為orderno既是order_master表
的主鍵,也是視圖的主鍵。而vendor_master表不被視為鍵保留表,因為vendor_master表的主鍵vencode是聯結欄位,不是視圖的主鍵。
樣本10:此樣本成功修改了記錄,因為odate列屬於鍵保留表order_master。對於非鍵保留表vendor_master的venname列的更新則是不允許的。
update wen_ord_view odate=odate+1 where vencode=‘V003‘; 注意:運行此樣本時,必須確保基表的主鍵已正確建立。
可以查詢字典視圖User_Updateble_Columns來查看聯結視圖中可更新的列。
可以查詢字典視圖User_Views來查看使用者所建立的視圖資訊。
視圖中的函數:視圖可以使用單行函數(由數字、字元、日期組成)、分組函數和運算式。
樣本11:此樣本用UPPER函數建立視圖,注意使用函數或運算式時,應賦予列一個別名。
Create VIEW vendor_master_view AS select vencode,UPPER(venname) vendor_name from vendor_master;
4.刪除視圖文法:Drop VIEW view_name ;
oracle學習篇十一:視圖