Bonjour,

Tout d'abord je travaille sous oracle 9. Voici mon problème :
J'ai 2 tables : AUDIT et IMPORT

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*==============================================================*/
/* Table : A_AUDIT                                              */
/*==============================================================*/
create table A_AUDIT  (
   ID                   NUMBER(10,0)                    not null,
   FK_IMPORT		NUMBER(10,0)                    not null,
   STATUS		VARCHAR2(10 CHAR)               not null,
   UPDATE_DATE          DATE                            not null,
   constraint PK_A_AUDIT primary key (ID)
)
/
 
/*==============================================================*/
/* Table : A_IMPORT                                             */
/*==============================================================*/
create table A_IMPORT  (
   ID                   NUMBER(10,0)                    not null,
   STATUS		VARCHAR2(10 CHAR)               not null,
   NOM_FICHIER		VARCHAR2(50 CHAR)               not null,
   constraint PK_A_IMPORT primary key (ID)
)
/
J'ai 2 sequences pour gérer les ID :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
create sequence SEQ_A_AUDIT
increment by 1 start with 1 maxvalue 999 minvalue 1 cache 20
/
 
create sequence SEQ_A_IMPORT
increment by 1 start with 1 maxvalue 999 minvalue 1 cache 20
/
l'association des tables et des séquences se fait par des triggers
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
create or replace
TRIGGER TRG_SEQ_A_AUDIT
BEFORE INSERT ON A_AUDIT
FOR EACH ROW
BEGIN  
IF :NEW.ID IS NULL 
    THEN SELECT SEQ_A_AUDIT.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF; 
END;
/
 
create or replace
TRIGGER TRG_SEQ_A_IMPORT
BEFORE INSERT ON A_IMPORT
FOR EACH ROW
BEGIN  
IF :NEW.ID IS NULL 
    THEN SELECT SEQ_A_IMPORT.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF; 
END;
/

Je voudrais faire un trigger qui insère une ligne dans la table AUDIT à chaque fois qu'il y a une modification sur la table IMPORT.
J'ai réussi à le faire pour l'UPDATE mais pas pour l'INSERT !
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create or replace
TRIGGER TRG_AUDIT_IMPORT
BEFORE INSERT OR UPDATE ON A_IMPORT
REFERENCING NEW AS N OLD AS O
FOR EACH ROW
BEGIN  
  IF INSERTING THEN
    IF :N.ID IS NULL THEN SELECT 
      SEQ_A_IMPORT.NEXTVAL INTO :N.ID FROM DUAL;
    END IF; 
    INSERT INTO A_AUDIT (FK_IMPORT, STATUS, UPDATE_DATE) values (:N.ID,:N.STATUS,sysdate);
  END IF;
 
  IF UPDATING ('STATUS') THEN
    INSERT INTO A_AUDIT (FK_IMPORT, STATUS, UPDATE_DATE) values (:N.ID,:N.STATUS,sysdate);
  END IF;
END;
/
voici l'erreur que j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Erreur SQL : ORA-02291: violation de contrainte d'intégrité (FRIDEV5.FK_A_AUDIT_REFERENCE_A_IMPORT) - clé parent introuvable
ORA-06512: à "FRIDEV5.TRG_AUDIT_IMPORT", ligne 6
ORA-04088: erreur lors d'exécution du déclencheur 'FRIDEV5.TRG_AUDIT_IMPORT'
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
*Cause:    A foreign key value has no matching primary key value.
*Action:   Delete the foreign key or add a matching primary key.
N'y a-t-il pas un conflit entre TRG_SEQ_A_IMPORT et TRG_AUDIT_IMPORT ? quelle séquence est executée en premier ?

Merci de votre aide
PoichOU