在删除触发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;

我有一个名为mytable列的表table_code和table_state_code。从中删除之前,我想检查table_state_code是否为0,如果不是,则不应删除,如果它是其他任何内容,则应删除该行。

使用我的当前代码,当table_state_code不是0时,它正确提高了例外,但是当它说:错误:在非易失性函数中不允许删除,而不是删除行。

预先感谢。

BEFORE DELETE触发器中您可以取消删除或让其发生。

  • 要取消删除您可以return NULLRAISE EXCEPTION
  • 让删除继续return OLD

删除已经启动(因为它是BEFORE DELETE触发),因此您不必执行DELETE FROM mytable WHERE table_code=OLD.table_code;

请参阅文档中触发行为的概述。

最新更新