Le DML dans le déclencheur fait partie de la même action que le DML déclencheur. Les deux doivent réussir ou échouer. Si le déclencheur déclenche une exception non gérée, l'instruction entière est annulée.
Voici un déclencheur sur T23 qui copie la ligne dans T42.
SQL> create or replace trigger t23_trg
2 before insert or update on t23 for each row
3 begin
4 insert into t42 values (:new.id, :new.col1);
5 end;
6/
Trigger created.
SQL>
Une inserrt réussie dans T23 ...
SQL> insert into t23 values (1, 'ABC')
2/
1 row created.
SQL> select * from t42
2/
ID COL
---------- ---
1 ABC
SQL>
Mais celui-ci échouera à cause d'une contrainte unique sur T42.ID. Comme vous pouvez le voir, l'instruction de déclenchement est également annulée ...
SQL> insert into t23 values (1, 'XYZ')
2/
insert into t23 values (1, 'XYZ')
*
ERROR at line 1:
ORA-00001: unique constraint (APC.T24_PK) violated
ORA-06512: at "APC.T23_TRG", line 2
ORA-04088: error during execution of trigger 'APC.T23_TRG'
SQL> select * from t42
2/
ID COL
---------- ---
1 ABC
SQL> select * from t23
2/
ID COL
---------- ---
1 ABC
SQL>