ludolitaliano  | Bonjour, j'ai compilé un trigger "BEFORE INSERT" sans erreur de compilation :    
  Code :
 - CREATE OR REPLACE TRIGGER T_ECICountries 
 -   BEFORE INSERT ON ECICountries 
 -   FOR EACH ROW 
 -  
 -      DECLARE NbRows INTEGER;
 -        
 -       -- Affectation de la numérotation automatique pour l'identifiant du pays 
 -       BEGIN 
 -         SELECT S_ECICountries.NEXTVAL INTO :new.ECICountries_Id FROM DUAL; 
 -        
 -       -- Si valeur manquante de pays
 -       IF (:new.ECICountries_ShortName='') OR (:new.ECICountries_ShortName=NULL) THEN
 -           -- On insère l'info dans table des logs 
 -           INSERT INTO LogTable VALUES (SYSDATE, 'Valeur manquante ECICountries_ShortName : ','Valeur manquante','ECICountries',:new.ECICountries_Id, Null, 'Warning'); 
 -           -- Puis on insère 'NR' comme ShortName de pays
 -           :NEW.ECICountries_ShortName:='NR';
 -       END IF; 
 -        
 -       -- Si nouvelle valeur de pays
 -       SELECT COUNT(*) INTO NbRows FROM ECICountries WHERE ECICountries_ShortName=:new.ECICountries_ShortName;
 -       IF NbRows=0 THEN
 -         -- On insère l'info dans table des logs
 -         INSERT INTO LogTable VALUES (SYSDATE, 'Nouvelle valeur ECICountries_ShortName : '|| :new.ECICountries_ShortName,'Nouvelle valeur','ECICountries',:new.ECICountries_Id, Null,'Warning'); 
 -       END IF;
 -      END;
 
  |  
 
 Je peux insérer "à la main" une ligne dans la table concernée par ce trigger, sans erreur :    
  Code :
 - INSERT INTO ECICountries (ECICountries_ShortName, ECICountries_Name) VALUES (FRA, 'FRANCE');
 
  |  
 
 En revanche quand j'éxécute le code suivant :    
  Code :
 - INSERT INTO ECICountries (ECICountries_ShortName, ECICountries_Name) 
 -    SELECT DISTINCT T1.ECICOUNTRIES_NAME, T1.ECICOUNTRIES_NAME 
 -    FROM ImportTable T1
 -    WHERE NOT EXISTS (SELECT * FROM ECICountries T2 WHERE T1.ECICOUNTRIES_NAME = T2.ECICountries_ShortName);
 
  |  
 
 J'obtiens l'erreur suivante :    
  Citation :
 
 ERROR at line 1:   ORA-04091: table A013009.ECICOUNTRIES is mutating, trigger/function may not see it   ORA-06512: at "A013009.T_ECICOUNTRIES", line 16   ORA-04088: error during execution of trigger 'A013009.T_ECICOUNTRIES' 
   |  
 
 Savez-vous ce que signifie exactement que la tables "is mutating" ?
 Merci.
     |