Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在删除触发器postgreSQL之前检查列值_Sql_Postgresql_Triggers - Fatal编程技术网

在删除触发器postgreSQL之前检查列值

在删除触发器postgreSQL之前检查列值,sql,postgresql,triggers,Sql,Postgresql,Triggers,有人能告诉我如何在从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 'Th

有人能告诉我如何在从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删除之前,我想检查表的状态代码是否为0,如果不是,则不允许删除。如果是其他内容,则应删除该行

在我的当前代码中,当table_state_code不是0时,它会正确地引发异常,但当它为0时,它会说: 错误:在非易失性函数中不允许删除,而不是删除行


提前感谢。

在删除前的
触发器中,您可以取消删除或让其发生

  • 要取消删除,您可以
    返回空值
    引发异常
  • 让删除继续
    返回旧的
删除操作已经开始(因为它是DELETE
触发器之前的
),所以您不必执行
DELETE FROM mytable,其中table_code=OLD.table_code

请参阅文档中的