Oracle視圖
一、視圖的概念
1.視圖是一個虛擬表,視圖并不在數據庫中存儲數據值,數據庫中只在數據字典中存儲對視圖的定義。
2、創建視圖的語句
CREATE [OR REPLACE]VIEW view_name [(column_name1[,column_name2…])] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY]
3、參數說明
CREATE OR REPALCE:修改視圖的定義,其實質是刪除原視圖并重建該視圖,但是會保留該視圖上授予的各種權限。如果Oracle數據庫中并沒有該視圖,直接create就可以。
WITH CHECK OPTION :表示對視圖的操作必須滿足子查詢中的約束條件。
WITH READ ONLY :用于創建只讀視圖
二.創建修改視圖
1、創建簡單視圖
簡單視圖指基于單個表并且不包含函數或表達式的視圖,在該視圖上可以執行DML語句。
例1:創建視圖V_emp,用于查詢員工的員工編號、姓、名、電話
CREATE VIEW V_emp AS SELECT Employee_ID ,Last_Name, First_Name , phone_number FROM Employees
查詢創建的視圖信息用數據字典user_views
例2:使用視圖,請在視圖V_emp中完成以下操作:
1)查詢該視圖所有信息。SELECT * FROM V_emp;
2)向該視圖中插入記錄:INSERT INTO V_emp values(employees_seq.nextval,’zhang’,’huan’,’123456’);
2、創建復雜視圖
復雜視圖指包含函數、表達式或者分組數據的視圖,在該視圖上執行DML語句時必須要符合特定條件。
注:在定義復雜視圖時必須為函數或表達式定義別名
例3:創建視圖V_orderdetail,用于查詢每個產品的銷售總數量和銷售總金額
CREATE VIEW V_orderdetail AS SELECT ProductID , sum(quantity) total_quantity, sum(quantity*unitprice) total_price FROM Orderdetails GROUP BY ProductID
例4:使用視圖V_orderdetail,查詢產品編號為10的產品的銷售總數量和銷售總金額
實現語句:
SELECT * FROM V_orderdetail WHERE productid=10;
查詢視圖中的某個列是否允許進行更新操作需要查詢數據字典User_updatable_columns
3、創建連接視圖
連接視圖指基于多個表建立的視圖,一般來說不會在該視圖上執行INSERT、UPDATE、DELETE操作。
例5:創建視圖V_ord_ordetail,用于查詢每個訂單的訂單編號、經銷商編號、訂購日期、訂購的產品編號、產品名稱、訂購數量、訂購單價。
實現的語句為:
CREATE OR REPLACE VIEW V_ord_ordetail AS SELECT o.orderid,customerid,orderdate,p.productid,productname,quantity,od.unitprice FROM orders o JOIN orderdetails od ON o.orderid=od.orderid JOIN products p ON od.productid=p.productid;
例6: 創建視圖v_depart_empl,查詢在“Sales”部門任職的員工的員工號、員工姓名、部門名稱dname、職位名稱job、工資sal和獎金信息
create view v_depart_empl as select empno,ename,sal,comm,dname,d.deptno from emp e join dept d on e.deptno=d.deptno;

4、創建只讀視圖
只讀視圖指只允許進行SELECT操作的視圖,在創建該視圖時指定WITH READ ONLY選項。
注:該視圖上不能執行INSERT、UPDATE、DELETE操作。
例7:建立一個只讀視圖V_ord_prod,要求查詢產品表中類別編號為2的產品編號、產品名稱、產品單價,類別編號。
實現的語句為:
CREATE OR REPLACE VIEW V_ord_prod AS SELECT productid,productname,unitprice,categoryid FROM products WHERE categoryid=2 WITH READ ONLY
5、創建CHECK約束視圖
WITH CHECK OPTION用于在視圖上定義CHECK約束,即在該視圖上執行INSERT或UPDATE操作時,數據必須符合查詢結果.
例8:建立一個帶CHECK約束的視圖V_check_prod,要求查詢產品表中類別編號為2的產品編號、產品名稱、產品單價,類別編號。
實現的語句為:
CREATE VIEW v_check_prod (產品編號,產品名稱,單價,類別) AS SELECT productid,productname,unitprice,categoryid FROM products WHERE categoryid=2 WITH CHECK OPTION
查詢該視圖各列的可更新性:
select column_name,updatable,insertable,deletable from user_updatable_columns where table_name=' V_CHECK_PROD ‘
三. 刪除視圖
刪除視圖的語句格式:
DROP VIEW view_name;
例9:將視圖t_view刪除
實現語句:
DROP VIEW t_view;
浙公網安備 33010602011771號