2016-11-22 4 views
0

が割り当てられていないレコードの「古い」:この機能により私はこのトリガー作成したまだ

CREATE TRIGGER trig_update 
AFTER INSERT 
ON "delivery" FOR EACH ROW 
EXECUTE PROCEDURE premium1(); 

を:表の配信に新しい値を挿入する際

CREATE OR REPLACE FUNCTION premium1() 
RETURNS trigger AS $$ 
BEGIN 
IF (TG_OP='INSERT') THEN 
IF(select sum(amount) from delivery where cli_num=OLD.cli_num group by cli_num) > 500.00 THEN 
    UPDATE client SET Type ='Gold' WHERE cli_num=OLD.cli_num; 
END IF; 
END IF; 
RETURN NULL; 
END; 
$$LANGUAGE plpgsql; 

私は以下のエラーを取得しています:

ERROR: record "old" is not assigned yet Stan SQL:55000

これに関する助力?

答えて

1
CREATE OR REPLACE FUNCTION premium1() 
RETURNS trigger AS $$ 
BEGIN 
IF (TG_OP='INSERT') THEN 
IF(select sum(amount) from delivery where cli_num=NEW.cli_num group by cli_num) > 500.00 THEN 
    UPDATE client SET Type ='Gold' WHERE cli_num=NEW.cli_num; 
END IF; 
END IF; 
RETURN NULL; 
END; 
$$LANGUAGE plpgsql; 
+0

おかげで非常に多く、それが動作するようになりました! – Cvg

2

AFTERトリガーOLDは、レコードがまだデータベースにないためアクセスできないため、表示されません。したがって、比較対象はありません。それをNEWに変更する必要があります。

fine manual:

For a row-level trigger, the input data also includes the NEW row for INSERT and UPDATE triggers, and/or the OLD row for UPDATE and DELETE triggers.

+0

からの返信のおかげで、カミル – Cvg