値がparent_key
のテーブルに変更された場合は、track
テーブルに値を挿入する必要があります。私は値がnullであるかどうかをチェックしなければならず、それ以外の場合は古い値を空にし、同じ値を新しい値に対して行う必要があります。私は、以下のcase文を試しましたが、最初の古い値または新しい値がnullの場合、トラックテーブルに挿入しません。 Oracleでケースがnullの場合、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;
なぜIF文を変更する必要がありますか? if文では、新しい値に等しくない古い値だけをチェックしなければならないので、文 – Andrew
をさらに説明した場合にはそれが入ります。基本的に 'NULL = NULL'を比較することはできません。' NULL IS NULL'や '' literal '=' literal''を実行できますが、 'NULL = 'literal''や' NULL = NULL'では実行できません。 SQLでのNULL比較を参照し、 – gmiley