J'écris un trigger dans lequel je dois insérer une valeur dans la table track
si la valeur change dans le tableau parent_key
. Je dois vérifier si la valeur est nulle puis la définir vide sinon l'ancienne valeur et la même chose que je dois faire pour la nouvelle valeur. J'ai essayé l'instruction case ci-dessous, mais ne l'insère pas dans la table de suivi si l'ancienne/nouvelle valeur initiale est null.cas où null puis vide dans l'instruction d'insertion oracle
create or replace TRIGGER parent_key_trg AFTER UPDATE ON parent_key
FOR EACH ROW
BEGIN
IF NOT :old.track_name=:new.track_name THEN
INSERT INTO track (TRACK_OLD_VALUE,TRACK_NEW_VALUE)
VALUES (case when :old.track_name is null then '' else to_char(:old.track_name) end,case when :new.track_name is null then '' else to_char(:new.track_name) end);
END IF;
END;
mais pourquoi ai-je besoin de changer dans l'instruction IF? Parce que dans l'instruction if je dois vérifier seulement l'ancienne valeur non égal à la nouvelle valeur alors il ira dans le cas où l'instruction – Andrew
je l'ai expliqué plus loin. Fondamentalement, vous ne pouvez pas comparer 'NULL = NULL', vous pouvez faire' NULL IS NULL' ou ''literal' = 'literal'', mais pas' NULL =' literal'' ou 'NULL = NULL'. Rechercher des comparaisons nulles dans SQL, – gmiley