私の顧客テーブルに次のトリガがあるので、時間の経過とともに顧客名が変更されたかどうか、以前のバージョンの名前がどのようなものかを確認できます。NEW.fieldがNULLのときにPostgreSQLが起動しない
CREATE OR REPLACE FUNCTION fn_customer_changes_log_history() RETURNS trigger as
$BODY$
BEGIN
IF (NEW.name <> OLD.name)
THEN
INSERT INTO tbl_customers_history(customer_id, name, action)
VALUES(OLD.id, OLD.name, 'UPDATE');
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER tr_customer_changes_log_history
BEFORE UPDATE ON tbl_customers
FOR EACH ROW
EXECUTE PROCEDURE fn_customer_changes_log_history();
しかし、私はUPDATEを行う際際NEW.name = NULLとし、OLD.name =「お客様1」は、このトリガーは起動されませんか?これは、NEW.nameが実際の文字列値を持つ場合にのみトリガされます。
なぜですか? NULLと "Customer 1"は等しくないのでトリガする必要がありますか?
ありがとう:
あなたが比較を修正する3210を必要としています。これは機能します。しかし、なぜ私がしたようにそれが引き起こされないか、あなたは何か考えがありますか?なぜこのCOALESCEものが必要なのですか? – koala@koala私は自分の答えを広げました。 – redneb