IF (TG_OP = 'UPDATE') AND (NEW."name" = OLD."name") THEN RETURN NEW; END IF;
IF (TG_OP = 'UPDATE') AND (NEW."name" = OLD."name") THEN RETURN NEW; END IF;
つまり 名前が更新されていない場合、何も変更せずに、トリガーの実行を終了します。 しかし、このトリガーを更新すると、「古いレコードがまだ割り当てられていません」というエラーが発生しました。 ただし、この設計ではエラーは発生しません。
IF (TG_OP = 'UPDATE') THEN IF (NEW."name" = OLD."name") THEN RETURN NEW; END IF; END IF;
IF (TG_OP = 'UPDATE') THEN IF (NEW."name" = OLD."name") THEN RETURN NEW; END IF; END IF;
したがって、論理式を計算するとき、その各コンポーネントが計算されます。 また、TG_OP!= 'UPDATE'(INSERTが実行されることを意味する)であっても、OLDが定義されていない2番目の条件がチェックされます。 したがって、エラー。