2017-12-17 7 views
0

postgreSQLのテーブルから削除する前に特定のカラムの値をチェックする方法を教えてもらえますか?削除前のカラム値をチェックするpostgreSQL

私の現在のコード:

CREATE OR REPLACE FUNCTION f_tr_table_row_prohibit_delete() RETURNS TRIGGER AS 
$$ 
BEGIN 
IF (OLD.table_state_code=0) THEN 
    DELETE FROM mytable WHERE table_code=OLD.table_code; 
ELSE 
    RAISE EXCEPTION 'The deletion of a row is allowed only when table state code is 0!'; 
END IF; 
END; 
$$ 

CREATE TRIGGER tr_table_row_prohibit_delete 
BEFORE DELETE ON mytable 
FOR EACH ROW 
EXECUTE PROCEDURE f_tr_laua_rida_prohibit_delete(); 

LANGUAGE plpgsql SECURITY DEFINER STABLE 
SET search_path = public, pg_temp; 

私は列table_codeとtable_state_codeがあるmytableという名前のテーブルを持っています。 mytableから削除する前に、table_state_codeが0であるかどうかを確認したい場合は、それ以外の場合は削除を許可しないでください。

table_state_codeが0ではなく、それが表示されているときに、私の現在のコードで正しく例外が発生します。 エラー:行を削除する代わりに、不揮発性の関数でDELETEを使用できません。

ありがとうございます。

答えて

0

BEFORE DELETEトリガーでは、削除をキャンセルしたり、そのようにすることができます。

  • 削除をキャンセルするには、return NULLまたはRAISE EXCEPTIONとすることができます。
  • 削除を続行するにはreturn OLD

削除はすでに開始されています(BEFORE DELETEトリガー)ので、DELETE FROM mytable WHERE table_code=OLD.table_code;を実行する必要はありません。

ドキュメントのOverview of Trigger Behaviorを参照してください。

関連する問題