如何检查PostgreSQL函数中的删除是否成功?

时间:2015-08-13 06:16:12

标签: sql postgresql

我有一个PostgreSQL函数可以删除表中的行。 可能存在我想要删除的行已被其他人删除的情况。在这种情况下,我想中止该功能并回滚它完成的所有操作。

manual并未说明如何在不进行任何删除的情况下返回DELETE语句。

我写了这个函数:

CREATE OR REPLACE FUNCTION func1()
  RETURNS integer AS
$BODY$
declare 
    line record;
    errorint int;
for line in select * from tab  where ...
LOOP
        DELETE from x WHERE...
        if 0 row deleted then:
            errorint =1;
            raise exception 'delete error';
end loop;               
return 0;           
exception
        when raise_exception then
            return errorint;
end;                
$BODY$
  LANGUAGE plpgsql VOLATILE

DELETE语句将删除仅限1行或0行WHERE只提供一行。意思是说成功就是"Query returned successfully: 1 rows affected",而失败的时候是"Query returned successfully: 0 rows affected"。我只是不知道如何检查它返回的内容。如果还有其他方法可以检查它也是可以接受的。

基本上我的问题是如何将if 0 row deleted then转换为PostgreSQL语法。

1 个答案:

答案 0 :(得分:1)

你想要做的是mutual exclusion,我认为你必须寻找表/行锁定。但是,如果您想要一个能够删除已删除行数的快速答案,请查看this answer