Я пишу триггер, в котором мне нужно вставить значение в таблицу track
, если значение изменяется в таблице parent_key
. Я должен проверить, является ли значение значением null, а затем установить для него пустое значение старого значения и то же самое, что я должен сделать для нового значения. Я попробовал приведенный ниже оператор case, но не вставлял его в таблицу треков, если начальное значение old/new равно null.case when null then empty in oracle insert statement
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;
, но почему мне нужно менять инструкцию IF? Потому что в выражении if я должен проверять только старое значение, а не равное новому значению, тогда оно поступит в случае, когда оператор – Andrew
Я объяснил это дальше. В принципе, вы не можете сравнивать «NULL = NULL», вы можете сделать «NULL NULL» или '' literal '=' literal'', но не 'NULL = 'literal'' или' NULL = NULL'. Посмотрите нулевые сравнения в SQL, – gmiley