Erk*_*lat 29 postgresql rowcount delete-row sql-delete
我正在寻找一种方法来返回PostgreSQL中受DELETE子句影响的行数.该文件指出,
成功完成后,DELETE命令将返回表单的命令标记
删除计数
计数是删除的行数.如果count为0,则没有符合条件的行(这不被视为错误).
如果DELETE命令包含RETURNING子句,则结果将类似于SELECT语句的结果,该SELECT语句包含RETURNING列表中定义的列和值,这些列和值是通过命令删除的行计算的.
但我很难找到一个很好的例子.任何人都可以帮我这个,我怎么能找出删除了多少行?
编辑: 我接受了Milen的解决方案,但我想提出一个我后来发现的替代方案.它可以在这里找到,在38.5.5下解释.获取结果状态标题.
Jak*_*zak 62
你可以使用RETURNING
条款:
DELETE FROM table WHERE condition IS TRUE RETURNING *;
Run Code Online (Sandbox Code Playgroud)
之后,您只需检查返回的行数.您可以使用CTE简化它:
WITH deleted AS (DELETE FROM table WHERE condition IS TRUE RETURNING *) SELECT count(*) FROM deleted;
Run Code Online (Sandbox Code Playgroud)
这应该只返回已删除的行数.
cop*_*360 11
这在Java中应该很简单.
Statement stmt = connection.createStatement();
int rowsAffected = stmt.executeUpdate("delete from your_table");
System.out.println("deleted: " + rowsAffected);
Run Code Online (Sandbox Code Playgroud)
在使用 psycopg2 的 Python 中,可以使用rowcount属性。下面是一个例子来找出有多少行被删除......
cur = connection.cursor()
try:
cur.execute("DELETE FROM table WHERE col1 = %s", (value,))
connection.commit()
count = cur.rowcount
cur.close()
print("A total of %s rows were deleted." % count)
except:
connection.rollback()
print("An error as occurred, No rows were deleted")
Run Code Online (Sandbox Code Playgroud)
小智 7
GET DIAGNOSTICS用于显示已修改/已删除记录的数量。
样例代码
CREATE OR REPLACE FUNCTION fnName()
RETURNS void AS
$BODY$
declare
count numeric;
begin
count := 0;
LOOP
-- condition here update or delete;
GET DIAGNOSTICS count = ROW_COUNT;
raise notice 'Value: %', count;
end loop;
end;
$BODY$a
Run Code Online (Sandbox Code Playgroud)
这适用于函数。它也可以与 INSERT 等其他操作一起使用。
DECLARE _result INTEGER;
...
DELETE FROM mytable WHERE amount = 0; -- or whatever other operation you desire
GET DIAGNOSTICS _result = ROW_COUNT;
IF _result > 0 THEN
RAISE NOTICE 'Removed % rows with amount = 0', _result;
END IF;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17404 次 |
最近记录: |