Désidément bc de pb aujourd'hui ... mais j'apprends bcp.
Encore un pb avec mes triggers ; la récursivité.
Mon problème concerne la duplication d'un enregistrement via un trigger.
Un article est dédié à ce sujet dans le oracle book d'oracle press (Oracle 8i) mais dans l'exemple cité la duplication se fait sur une base distante via Dblink dans mon cas la duplication est partiel (pas de pb de ce coté la) mais dans la même table. Existe t il une solution pour evité une execution récursive du trigger.
voila mes triggers ::
voila l'erreur
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
23
24
25 CREATE OR REPLACE TRIGGER TRIG_BRANCARD BEFORE INSERT ON BRANCARD FOR EACH ROW DECLARE ROW1 INT; BEGIN SELECT SEQ_BRANCARD.NEXTVAL INTO ROW1 FROM DUAL ; :NEW.NO_BRANC:=ROW1; END; / -- Trigger preparent le retour.... CREATE OR REPLACE TRIGGER TRIG_BRANCARD_PREPRETOUR BEFORE INSERT ON BRANCARD FOR EACH ROW DECLARE R1 INT; BEGIN SELECT SEQ_BRANCARD.NEXTVAL INTO R1 FROM DUAL ; INSERT INTO BRANCARD (NO_HOP,NO_BRANC,TY_BRANC,DT_TRANS,ID_PATIENT,MD_TRANS) VALUES (:new.NO_HOP,R1,'R',:new.DT_TRANS,:new.ID_PATIENT,:new.MD_TRANS) ; END; /
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 ERROR at line 1: ORA-00036: maximum number of recursive SQL levels (50) exceeded ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 5 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD' ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8 ORA-04088: error during execution
voila l'erreur
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 CREATE OR REPLACE TRIGGER TRIG_BRANCARD BEFORE INSERT ON BRANCARD FOR EACH ROW DECLARE ROW1 INT; R1 INT; BEGIN SELECT SEQ_BRANCARD.NEXTVAL INTO ROW1 FROM DUAL ; :NEW.NO_BRANC:=ROW1; SELECT SEQ_BRANCARD.NEXTVAL INTO R1 FROM DUAL ; INSERT INTO BRANCARD (NO_HOP,NO_BRANC,TY_BRANC,DT_TRANS,ID_PATIENT,MD_TRANS) VALUES (:new.NO_HOP,R1,'R',:new.DT_TRANS,:new.ID_PATIENT,:new.MD_TRANS) ; END; /
une idée...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Warning: Entry/Exit code is optimized. Cannot restore context (UNWIND 22) ORA-03113: end-of-file on communication channel
merci d'avance && merci pour votre grande réactivité constatée lors de mes précédents posts
Partager