プロが教えるわが家の防犯対策術!

お世話になっております。
PL/pgSQLでPostgreSQLのあるテーブルにinsertがかかったら、別のテーブルをtriggerを使ってupdateする構文を書いていますが、上手くいきません。
insertを実行すると、変数が割り当てられていない旨が表示されます。
サンプルは以下の通り
DROP FUNCTION k_trig();

CREATE FUNCTION k_trig() RETURNS OPAQUE AS'
DECLARE
ov1 RECORD;
ov2 RECORD;
BEGIN
SELECT * FROM 個別集計 INTO ov1 WHERE id = new.id;
UPDATE 個別集計 SET a1 = ov1.a1 + new.a1, a2 = ov1.a2 + new.a2, a3 = ov1.c + new.a3 WHERE id = new.id;
*****以下省略
insert実行

「record ov1 is unassigned yet」と表示されます。
declareで宣言しているのですが・・・

何が原因か教えてください

A 回答 (1件)

>SELECT * FROM 個別集計 INTO ov1 WHERE id = new.id;


>UPDATE 個別集計 SET a1 = ov1.a1 + new.a1, a2 = ov1.a2 + new.a2, a3 = ov1.c + new.a3 WHERE id = new.id;

個別集計TBLのデータに新規登録した値を加えるという処理を行いたいんですよね。それでしたら、下記のように1つのUPDATE文で実行可能ではないでしょうか?

UPDATE 個別集計 SET a1 = a1 + new.a1, a2 = a2 + new.a2, a3 = c + new.a3 WHERE id = new.id;

PL/SQL(Oracle8)の使用経験しかありませんので、なぜレコードが空なのかわかりませんが、今回の件についてはこれで解決するのではないでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!