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

Oracle 視圖插入資料完全指南:非連接視圖直更新、連接視圖關鍵保留表規則與 INSTEAD OF 觸發器實戰

     編輯:Oracle 資料庫基礎

視圖可更新性判斷

1. 非連接視圖

基於單一基礎表建立的視圖稱為非連接視圖,所有非連接視圖均可直接更新,支援 INSERT、UPDATE、DELETE 操作。

2. 連接視圖

需遵循基本更新準則。針對 INSERT 操作:

  • INSERT 語句中不能顯式或隱式引用任何非關鍵保留基礎表的欄位。
  • 若視圖定義包含 WITH CHECK OPTION 子句,則完全禁止對視圖執行 INSERT。

關鍵保留表 vs 非關鍵保留表

-- 範例:EMP 與 DEPT 連接視圖
CREATE VIEW emp_dept AS
SELECT emp.emp_no, emp.emp_name, emp.dept_no, dept.name
FROM emp, dept
WHERE emp.dept_no = dept.dept_no;
  • EMP 表中 EMP_NO 為主鍵,在視圖中仍為主鍵 → EMP 為關鍵保留表
  • DEPT 表中 DEPT_NO 在視圖中不再唯一 → DEPT 為非關鍵保留表

因此,INSERT 時不可引用 DEPT 表欄位(如 dept.name)。

多表關聯視圖插入最佳實踐:INSTEAD OF 觸發器

當多表關聯需向視圖插入資料,強烈建議使用 INSTEAD OF 觸發器:

CREATE TRIGGER trigger_name
ON view_name
INSTEAD OF INSERT
AS
BEGIN
    -- 宣告變數
    -- 從 inserted 表查出所有欄位資料,賦值給變數
    -- 向第一張基礎表插入資料
    -- 向第二張基礎表插入資料
END;

快速檢查視圖/表可更新性

查詢 USER_UPDATABLE_COLUMNS 視圖,即可得知該表或視圖哪些欄位可更新。

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