谁能告诉我,在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列。在从mytable中删除之前,我想检查table_state_code是否为0,如果不是,那么它不应该允许删除,如果它是其他任何东西,那么它应该删除该行。
使用我当前的代码,当table_state_code不为0时,它会正确地引发异常,但当它为0时,它会说:错误:不允许在非易失性函数中使用DELETE而不是删除行。
先谢谢你了。
1条答案
按热度按时间wztqucjr1#
在
BEFORE DELETE
触发器中,您可以取消删除或让它发生。return NULL
或RAISE EXCEPTION
。return OLD
。删除已经开始(因为它是
BEFORE DELETE
触发器),所以您不必执行DELETE FROM mytable WHERE table_code=OLD.table_code;
。参见文档中的Overview of Trigger Behavior。