Lors de la création d'un Instead Of
Déclencheur, le développeur SQL permet d'inclure les 3 actions DML dans le même déclencheur:
Le résultat SQL ressemble à:
CREATE OR REPLACE TRIGGER TRIGGER1
INSTEAD OF DELETE OR INSERT OR UPDATE ON PO_COSTED_BOM_V
BEGIN
NULL;
END;
Je suis capable de combiner Insert
et Update
comme ceci:
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
dans la gâchette?merci
De codage du corps de déclenchement
Détecter l'opération DML qui a déclenché une gâchette
Si plus d'un type d'opération DML peut déclencher une gâchette (par exemple, sur INSERT OR Supprimer OR de la mise à jour de EMP), le corps de la gâchette peut utiliser les prédicats conditionnels Insertionner, suppression et mise à jour à la vérification. quel type de relevé incendie la gâchette.
Dans le code du corps de la gâchette, vous pouvez exécuter des blocs de code en fonction du type d'opération DML qui a déclenché la gâchette:
IF INSERTING THEN ... END IF; IF UPDATING THEN ... END IF; IF DELETING THEN ... END IF;
dans ton cas
...
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;