回覆列表
  • 1 # 使用者8078482822893

    Oracle中建立檢視 檢視是基於一個表或多個表或檢視的邏輯表,本身不包含資料,透過它可以對錶裡面的資料進行查詢和修改。檢視基於的表稱為基表。 檢視是儲存在資料字典裡的一條select語句。 透過建立檢視可以提取資料的邏輯上的集合或組合。 檢視的優點:

    1.對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。

    2.使用者透過簡單的查詢可以從複雜查詢中得到結果。

    3.維護資料的獨立性,試圖可從多個表檢索資料。

    4.對於相同的資料可產生不同的檢視。 檢視分為簡單檢視和複雜檢視: 簡單檢視只從單表裡獲取資料 複雜檢視從多表 簡單檢視不包含函式和資料組 複雜檢視包含 簡單檢視可以實現DML操作 複雜檢視不可以. 檢視的建立: CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY]其中:OR REPLACE :若所建立的試圖已經存在,ORACLE自動重建該檢視;FORCE :不管基表是否存在ORACLE都會自動建立該檢視;NOFORCE :只有基表都存在ORACLE才會建立該檢視:alias :為檢視產生的列定義的別名;subquery :一條完整的SELECT語句,可以在該語句中定義別名;WITH CHECK OPTION : 插入或修改的資料行必須滿足檢視定義的約束;WITH READ ONLY : 該檢視上不能進行任何DML操作。例如: CREATE OR REPLACE VIEW dept_sum_vw (name,minsal,maxsal,avgsal) AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal) FROM emp e,dept d WHERE e.deptno=d.deptno GROUP BY d.dname; 檢視的定義原則: 1.檢視的查詢可以使用複雜的SELECT語法,包括連線/分組查詢和子查詢; 2.在沒有WITH CHECK OPTION和 READ ONLY 的情況下,查詢中不能使用 ORDER BY 子句; 3.如果沒有為CHECK OPTION約束命名,系統會自動為之命名,形式為SYS_Cn; 4.OR REPLACE選項可以不刪除原檢視便可更改其定義並重建,或重新授予物件 許可權。 檢視的查詢: 檢視建立成功後,可以從檢視中檢索資料,這點和從表中檢索資料一樣。 還可以查詢檢視的全部資訊和指定的資料行和列。 如: 檢索資料: SQL>SELECT * FROM dept_sum_vw; 查詢檢視定義: SELECT view_name,text from user_views; 其中text顯示的內容為檢視定義的SELECT語句,可透過DESC USER_VIEWS 得到相關資訊。 修改檢視: 透過OR REPLACE 重新建立同名檢視即可。 檢視上的DML 操作: DML操作應遵循的原則: 1.簡單檢視可以執行DML操作; 2.在檢視包含GROUP 函式,GROUP BY子句,DISTINCT關鍵字時不能 刪除資料行; 3.在檢視不出現下列情況時可透過檢視修改基表資料或插入資料: a.檢視中包含GROUP 函式,GROUP BY子句,DISTINCT關鍵字; b.使用表示式定義的列; c.ROWNUM偽列。 d.基表中未在檢視中選擇的其他列定義為非空且無預設值。 檢視可用於保持資料庫的完整性,但作用有限。透過檢視執行引用完整性約束可在資料庫級執行約束。 WITH CHECK OPTION 子句限定: 透過檢視執行的INSERTS和UPDATES操作不能建立該檢視檢索不到的資料行, 因為它會對插入或修改的資料行執行完整性約束和資料有效性檢查。例如: CREATE OR REPLACE VIEW vw_emp20 AS SELECT * FROM emp WHERE deptno=20 WITH CHECK OPTION constraint vw_e

  • 中秋節和大豐收的關聯?
  • 午夜十二點半是什麼時辰啊?