- 締切済み
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を使いたいのです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- med2dic
- ベストアンサー率77% (21/27)
triggerを使ったことがないので見当違いでしたらすみません > ERROR: control reached end of trigger procedure without RETURN returnが見つからないままendに達したとかいった感じだと思うのですが、 if文(TG_OP='delete')に入らなかった場合のreturnがないと言われているのではないでしょうか?