1. 程式人生 > >oracle資料庫學習07

oracle資料庫學習07

檢視

檢視其實就是一個或幾個實體表匯出的表,它本身不包含任何真實資料的虛擬表。資料庫中只存放檢視的定義,而不存放檢視對應的資料。(我的理解:檢視就是需要的時候把它從資料庫中調出來的一個視窗,可以觀察資料的變化,有點像大資料)

優點:

  • 簡化使用者操作;
  • 構建邏輯性;
  • 加強安全保護;
  • 表達清晰;

格式:

CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 檢視名稱[(別名)]
		AS
	子查詢;

FORCE:表示要建立檢視的表不存在也可以建立檢視;
NOFORCE:表示要建立檢視的表必須存在,否則無法建立;
OR REPLACE

:表示檢視的替換,如果建立的檢視不存在則建立新的,如果試圖已經存在,則將其替換。

例:建立一張基本工資大於2000的僱員資訊的檢視

CREATE VIEW v_myview
		AS
	SELECT * FROM emp WHERE sal>2000;

這時可將這條語句封裝在檢視中,以後直接呼叫該檢視就行。

替換v_myview檢視,定義新檢視,顯示每個部門的詳細資訊

 CREATE OR REPLACE VIEW v_myview
 		AS
 SELECT d.deptno,d.dname,d.loc,
 COUNT(e.empno) count,NVL(ROUND(AVG(sal),2),0)
 avg,NVL(SUM(sal),0) sum,
 	NVL(MAX(sal),0) max,NVL(MIN(sal),0) min
 FROM emp e,dept d
 WHERE e.deptno(+)=d.deptno
 GROUP BY d.deptno,d.dname,d.loc;

建立成功後,下面直接查詢檢視內容。

SELECT * FROM v_myview;

如果要對簡單檢視進行增刪查改操作

CREATE OR REPLACE VIEW v_emp20
	AS
SELECT empno,ename,job,sal,deptno FROM emp WHERE deptno=20;

UPDATE v_emp20 SET ename='JAVA0', job = 'MANAGER' , sal = 2300 WHERE empno=6688;

DELETE FROM v_emp20 WHERE empno=6688;

INSERT INTO v_emp20(empno,ename,job,sal,deptno) VALUES(6688,'JASON','CLERK',1900,20);
COMMIT;

這時會影響原表資料

WITH CHECK OPTION子句

在建立檢視的時候需要使用一些WHERE子句做一些條件的限制,檢視建立完成後如果需要修改WHERE子句中的欄位內容,則需通過WITH CHECK OPTION保證檢視的建立

格式:

CREATE [FORCE | NOFORCE][OR REPLACE] VIEW 檢視名稱[(別名1,別名2,...)]
	AS
子查詢[WITH CHECK OPTION][ CONSTRAINT 約束條件]];

WITH READ ONLY子句

讓檢視中所有欄位不可更新,則通過WITH READ ONLY子句控制
格式:
CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 檢視名稱[(別名1,…)]
AS
子查詢 [WITH CHECK OPTION][CONSTRAINT 約束名稱]]
[WITH READ ONLY];

刪除檢視

DROP VIEW 檢視名稱