Bonjour à tous,
Je sais que ce problème a été reporté mainte fois, mais je n'arrive pas à trouver une solution sans pour autant avoir à créer d'autre package ou
d'autre trigger, ou une table temporaire..

J'ai le trigger suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
CREATE OR REPLACE TRIGGER company_class_pre_ins
BEFORE INSERT  ON g_dosser 
FOR EACH ROW
....
SELECT COUNT(*)
INTO existing_doss_cnt
FROM g_dosser doss
WHERE doss.doss_num= :new.doss_num
AND   doss.doss_type= :new.doss_type;

et un autre trigger qui contient la requête suivante (donc lorsqu'on a un tel insert le premier trigger se déclenche)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO g_dosser(
                doss_num,
                doss_type,
                doss_code,
                doss_group_code,
                doss_id_fl)    
SELECT      :new.dbd_num,
                dbd_type,
                decode( dbd_ind, 'i', 'itnn', 'a', 'itnn', NULL ),
                decode( dbd_ind, 'b', 'rppd', 'a', 'rppd', NULL ),
                'n'
FROM    dbd_type
WHERE   :new.dbd_flag = 'y';
je reçois effectivement l'erreur ORA-20700: ORA-04091 table is mutating...

je sais que le problème provient du premier count(*) puisqu'il est appliqué sur la table elle même, mais je n'arrive pas à contourner cette erreur
Merci pour votre aide