首页 > 解决方案 > DELETE 查询返回已删除记录的计数

问题描述

使用 postgres 9.6。

我正在尝试编写一个函数,该函数将删除记录并将已删除的行数返回给应用程序开发人员。我有一些以下演示,但我一直遇到语法问题。

BEGIN;
DELETE FROM it.animals WHERE id <5
RETURNING COUNT(id);
ROLLBACK;

[2020-03-12 09:14:11] [42803] 错误:返回中不允许聚合函数

标签: postgresql

解决方案


您需要使用公用表表达式

with deleted as (
   DELETE FROM it.animals WHERE id <5
   returning id
)
select count(*)
from deleted;

但是,如果这是 PL/pgSQL 函数的一部分,您可以使用GET DIAGNOSTICS

$$
declare 
  l_num_rows integer;
begin
  DELETE FROM it.animals WHERE id <5
  GET DIAGNOSTICS l_num_rows = ROW_COUNT;  
  return l_num_rows;
end;
$$

推荐阅读