【发布时间】:2015-08-13 06:16:11
【问题描述】:
我有一个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 语法。
【问题讨论】:
-
您可以使用
raise notice进行验证 -
这将如何解决我的问题?我需要知道 DELETE 何时不影响任何行。
raise notice对此有何帮助? -
这应该可以解决我的问题...但它提出了另一个问题。第一个
GET DIAGNOSTICS与only useful after an INSERT command无关。第二个GET DIAGNOSTICS只能区分0行到多行。不能说多少。它给出正确或错误的答案。第三,不提供任何信息。真的没有办法知道影响了多少行吗?它不会进行任何降神。当查询完成时,此信息会打印到控制台中。
标签: sql postgresql