Bonjour ou bonsoir,

J'ai la table suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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