[ORACLE] Trigger bien compilé qui ne marche pas bien

Trigger bien compilé qui ne marche pas bien [ORACLE] - SQL/NoSQL - Programmation

Marsh Posté le 30-03-2004 à 09:56:23    

Ciao,
je compile correctement le trigger :

Code :
  1. [cpp]CREATE OR REPLACE TRIGGER T_ECICountries 
  2.   BEFORE INSERT ON ECICountries 
  3.   FOR EACH ROW 
  4.      DECLARE NbRows INTEGER;
  5.      
  6.       -- Affectation de la numérotation automatique pour l'identifiant du pays 
  7.       BEGIN 
  8.         SELECT S_ECICountries.NEXTVAL INTO :new.ECICountries_Id FROM DUAL; 
  9.      
  10.       -- Si valeur manquante de pays
  11.       IF (Trim(:new.ECICountries_ShortName)='') OR (:new.ECICountries_ShortName=NULL) THEN
  12.           -- On insère l'info dans table des logs 
  13.           INSERT INTO LogTable VALUES (SYSDATE, 'Valeur manquante ECICountries_ShortName : ','Valeur manquante','ECICountries',:new.ECICountries_Id, Null, 'Warning'); 
  14.           -- Puis on insère 'NR' comme ShortName de pays
  15.           SELECT 'NR' INTO :NEW.ECICountries_ShortName FROM DUAL;
  16.       END IF; 
  17.        
  18.       -- On insère une nouvelle valeur de pays donc on l'inscrit dans la log
  19.       INSERT INTO LogTable VALUES (SYSDATE, 'Nouvelle valeur ECICountries_ShortName : '|| :new.ECICountries_ShortName,'Nouvelle valeur','ECICountries',:new.ECICountries_Id, Null,'Warning'); 
  20.   END;


Mais quand j'exécute :

Code :
  1. INSERT INTO ECICountries (ECICountries_ShortName, ECICountries_Name) 
  2. SELECT DISTINCT T1.ECICOUNTRIES_NAME, T1.ECICOUNTRIES_NAME 
  3. FROM ImportTable T1
  4. WHERE NOT EXISTS (SELECT * FROM ECICountries T2 WHERE T1.ECICOUNTRIES_NAME = T2.ECICountries_ShortName);


Sql+ me répond :

Citation :

INSERT INTO ECICountries (ECICountries_ShortName, ECICountries_Name)
             *
ERROR at line 1:
ORA-01400: cannot insert NULL into
("A013009"."ECICOUNTRIES"."ECICOUNTRIES_SHORTNAME" )


 
Or les valeurs nulles sont théoriquement traitées dans ce trigger before insert   :cry:  
Qu'en pensez-vous ?

Reply

Marsh Posté le 30-03-2004 à 09:56:23   

Reply

Marsh Posté le 30-03-2004 à 12:45:20    

Je n'ai pas trop cherché à voir le pourquoi du trigger mais dans ton test IF, utilise (:new.ECICountries_ShortName IS NULL).
Tout opérateur utilisé avec une valeur nulle retourne NULL, donc (:new.ECICountries_ShortName=NULL) retourne toujours NULL, quelle que soit la valeur de :new.ECICountries_ShortName.

Reply

Marsh Posté le 30-03-2004 à 14:11:02    

Merci Agagax je vais essayé avec IS NULL !
Ca y est; j'ai essayé; le trigger se compile bien sans erreur mais je ne peux toujours pas faire un INSERT INTO avec des valeurs nulles.
Enfin je laisse la syntaxe IS NULL.


Message édité par ludolitaliano le 30-03-2004 à 14:12:43
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed