こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

triggerでdelete

Table ke_names
server_id | server_name
-----------+-------------
4220 |
Foreign-key constraints:
"ke_names_server_id_fkey" FOREIGN KEY (server_id) REFERENCES du_names(server_id) ON UPDATE CASCADE

Table du_names
server_id | server_name
-----------+-------------
4220 | test
du_name server_id 4220を削除するためにそれ以前にke_namesのserver_idを削除するtriggerを書きました。
gnax=# create function kedel_func() returns trigger as '
gnax'# begin
gnax'# if TG_OP = ''delete'' then
gnax'# delete from ke_names where ke_names.server_id=du_names.server_id;
gnax'# return null;
gnax'# end if;
gnax'# end;
gnax'# '
gnax-# LANGUAGE 'plpgsql' ;
CREATE FUNCTION
gnax=# create trigger del_ke_names before delete on du_names for each row execute procedure KEDEL_FUNC();
CREATE TRIGGER
gnax=# delete from du_names where server_id=4220;
ERROR: control reached end of trigger procedure without RETURN
CONTEXT: PL/pgSQL function "kedel_func"
とエラーになります。
ke_names.server_id=du_names.server_id;をke_names.server_id=old.server_id;と変更してみましたが結果はエラーでした。どこがいけないのでしょうか?
FOREIGN KEYでON DELETE CASCADEを使えば削除できるのですが、triggerを使いたいのです。

投稿日時 - 2009-12-23 06:42:03

QNo.5541567

困ってます

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

triggerを使ったことがないので見当違いでしたらすみません

> ERROR: control reached end of trigger procedure without RETURN

returnが見つからないままendに達したとかいった感じだと思うのですが、

if文(TG_OP='delete')に入らなかった場合のreturnがないと言われているのではないでしょうか?

投稿日時 - 2009-12-25 13:14:35

あなたにオススメの質問