Oracle
在 Oracle db 中,如何在同一個“Instead Of”觸發器中組合插入、更新和刪除?
創建
Instead Of
觸發器時,Sql Developer 允許在同一個觸發器中包含所有 3 個 DML 操作:結果 SQL 如下所示:
CREATE OR REPLACE TRIGGER TRIGGER1 INSTEAD OF DELETE OR INSERT OR UPDATE ON PO_COSTED_BOM_V BEGIN NULL; END;
我可以結合起來
Insert
像Update
這樣:CREATE OR REPLACE TRIGGER TRIGGER1 INSTEAD OF INSERT OR UPDATE OR DELETE ON PO_COSTED_BOM_V BEGIN UPDATE SRC_TBL SET CFG_VALUE = :NEW.CFG_VALUE WHERE CFG_NAME = :NEW.CFG_NAME; IF SQL%NOTFOUND THEN INSERT INTO SRC_TBL (CFG_NAME, CFG_VALUE) VALUES(:NEW.CFG_NAME, :NEW.CFG_VALUE); END IF; END;
- 但是我如何將
Delete
語句放入觸發器中?- 觸發器如何知道執行了哪個 DML 操作?
謝謝
檢測觸發觸發器的 DML 操作
如果不止一種類型的 DML 操作可以觸發觸發器(例如,ON INSERT OR DELETE OR UPDATE OF emp),則觸發器主體可以使用條件謂詞 INSERTING、DELETING 和 UPDATING 來檢查觸發觸發器的語句類型。
在觸發器主體的程式碼中,您可以根據觸發觸發器的 DML 操作類型執行程式碼塊:
IF INSERTING THEN ... END IF; IF UPDATING THEN ... END IF; IF DELETING THEN ... END IF;
在你的情況下
... if inserting then INSERT INTO SRC_TBL (CFG_NAME, CFG_VALUE) VALUES(:NEW.CFG_NAME, :NEW.CFG_VALUE); elsif updating then UPDATE SRC_TBL SET CFG_VALUE = :NEW.CFG_VALUE WHERE CFG_NAME = :NEW.CFG_NAME; elsif deleting then ... END IF;