【发布时间】:2017-12-17 20:31:12
【问题描述】:
有人可以告诉我如何在从 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,而不是删除行。
提前致谢。
【问题讨论】:
标签: sql postgresql triggers