首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle View 視圖完整指南:建立、查詢、DML 操作與進階管理

     編輯:Oracle 資料庫基礎

視圖核心觀念

視圖是基於一個或多個資料表/視圖的邏輯表,本身不儲存資料,儲存於資料字典中的一條 SELECT 陳述式。基表是視圖查詢的來源物件。Oracle 五大資料庫物件:表、視圖、序列、索引、同義詞。

視圖四大優勢

  1. 存取控制:選擇性公開資料欄位/列
  2. 簡化複雜查詢:使用者以簡單查詢取得複雜邏輯結果
  3. 資料獨立性:屏蔽底層表結構變更
  4. 多角度呈現:同一資料集可建立不同視圖滿足業務需求

簡易視圖 vs 複雜視圖

特性簡易視圖複雜視圖
資料來源單一資料表多張資料表
函數/群組不包含包含聚合函數、GROUP BY、DISTINCT
DML 操作支援不支援

建立視圖語法

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view_name
[(alias [, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY];

關鍵字說明:

  • OR REPLACE:視圖存在時自動重建,保留授權
  • FORCE:基表不存在也強制建立
  • NOFORCE(預設):基表必須存在
  • alias:為視圖欄位定義別名
  • 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 可在不刪除原視圖下修改定義並重新授權

查詢視圖與中繼資料

  • 查資料:SELECT * FROM dept_sum_vw;
  • 查定義:SELECT view_name, text FROM user_views;(text 欄位為定義 SQL)
  • 結構描述:DESC USER_VIEWS

修改視圖

使用 CREATE OR REPLACE VIEW 重建同名視圖即可。

視圖上的 DML 操作限制

不可透過視圖修改基表的情況:

  • 視圖包含群組函數、GROUP BY、DISTINCT
  • 使用運算式定義的欄位
  • 包含 ROWNUM 偽欄位
  • 基表中未被視圖選取的欄位定義為 NOT NULL 且無預設值

WITH CHECK OPTION 實戰範例

CREATE OR REPLACE VIEW vw_emp20
AS SELECT * FROM emp
WHERE deptno = 20
WITH CHECK OPTION CONSTRAINT vw_emp20_ck;

嘗試將 20 部門員工修改為其他部門會報錯:ORA-01402: view WITH CHECK OPTION where-clause violation,確保資料完整性。

刪除視圖

DROP VIEW view_name;

僅移除視圖定義,不影響基表資料。基於被刪視圖的其他視圖/應用將失效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved