0

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フィールドを期待どおりに更新しません。なぜこれが起こっているのかについての考えは?

4

1 に答える 1

5

明らかに、この条件:IF NEW.gnp_old > NEW.gnp_oldが true になることはないため、トリガーはまったく効果がありません。

于 2013-03-12T14:52:11.903 に答える