ludolitaliano | Ciao,
je compile correctement le trigger : Code :
- [cpp]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 (Trim(: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
- SELECT 'NR' INTO :NEW.ECICountries_ShortName FROM DUAL;
- END IF;
-
- -- On insère une nouvelle valeur de pays donc on l'inscrit dans la log
- INSERT INTO LogTable VALUES (SYSDATE, 'Nouvelle valeur ECICountries_ShortName : '|| :new.ECICountries_ShortName,'Nouvelle valeur','ECICountries',:new.ECICountries_Id, Null,'Warning');
- END;
|
Mais quand j'exécute :
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);
|
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 Qu'en pensez-vous ? |