joh*_*why 1 trigger oracle plsql dml
创建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;
Run Code Online (Sandbox Code Playgroud)
我能够结合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;
Run Code Online (Sandbox Code Playgroud)
Delete语句放入触发器中?谢谢
小智 5
检测触发触发器的 DML 操作
如果不止一种类型的 DML 操作可以触发触发器(例如,ON INSERT OR DELETE OR UPDATE OF emp),触发器主体可以使用条件谓词 INSERTING、DELETING 和 UPDATING 来检查触发触发器的语句类型。
在触发器主体的代码中,您可以根据触发触发器的 DML 操作类型执行代码块:
Run Code Online (Sandbox Code Playgroud)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;
Run Code Online (Sandbox Code Playgroud)