Postgresで実行しようとしているトリガー関数があります。
コンパイルしてトリガーを追加しますが、期待どおりに値をテーブルに挿入しません。
使用する関数は次のようになります。
CREATE OR REPLACE FUNCTION
calc_gnpDifference(n integer, o integer)
RETURNS NUMERIC AS $$
SELECT $1 ::numeric - $2::numeric AS gnpDifference;
$$ LANGUAGE SQL;
そしてトリガー部分:
CREATE OR REPLACE FUNCTION autoCalculate() RETURNS TRIGGER AS $$
BEGIN
IF NEW.gnp_old > NEW.gnp_old THEN
NEW.gnpDifference := calc_gnpDifference(NEW.gnp_old, NEW.gnp);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER insertDifference ON country;
CREATE TRIGGER insertDifference BEFORE INSERT ON country
FOR EACH ROW EXECUTE PROCEDURE autoCalculate();
ただし、データを挿入すると、トリガーがgnpDifferenceフィールドを期待どおりに更新しません。なぜこれが起こっているのかについての考えは?