Bonjour ou bonsoir,
J'ai la table suivante :
1 2 3 4 5 6 7 8
| CREATE TABLE tab(
id1 CHAR(5),
id2 CHAR(5),
CONSTRAINT REF1
FOREIGN KEY (id1, id2) REFERENCES tabExt1(id1, id2),
id3 CHAR(5) CONSTRAINT REF2 REFERENCES tabExt2(id3),
CONSTRAINT PKtab PRIMARY KEY (id1, id2, id3)
); |
J'ai fais un bête trigger :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE OR REPLACE TRIGGER monTrig
AFTER INSERT OR UPDATE OR DELETE ON tab
FOR EACH ROW
DECLARE
BEGIN
IF INSERTING THEN
dbms_output.put_line('test');
END IF;
EXCEPTION
WHEN OTHERS THEN dbms_output.put_line('Exception interceptee');
END; |
Et finalement, j'ai fais un bête insert sur tab :
INSERT INTO tab VALUES (1, 2, 3);
=> 1, 2 et 3 n'existent pas dans les tables référencées.
Du coup, il me renvoit :
(1) Erreur SQL : ORA-02291: integrity constraint violated - parent key not found
(2)test
La première ligne est logique(1) vu que les clés n'existent pas.
Mais pourquoi j'ai (2) ? Vu que le trigger fonctionne après INSERT et que l'exception précédente a été remontée, il ne devrait pas rentrer dans le trigger. Mais il le fait, pourquoi ?
Je ne trouve pas de réponses sur le net :s
Ce qui m'embête fortement, c'est que je ne sais pas vérifié si il y a eu une contrainte qui a été violée. Comment faire ?
Merci
Partager