如何在PostgreSQL中将受影响行数赋值给变量?
解决PostgreSQL变量赋值问题
你可以通过SELECT ... INTO语句直接将查询结果赋值给变量,修改后的代码如下:
DECLARE deletedRowCount integer; BEGIN WITH deleted as ( DELETE FROM MyTable "t" USING tmp_closed_positions WHERE condition RETURNING "t"."Id" ) SELECT COUNT(*) INTO deletedRowCount FROM deleted; -- 示例:使用变量输出结果 RAISE NOTICE '删除的行数:%', deletedRowCount; END;
关键说明
- 这段逻辑必须放在
BEGIN...END块内,因为PostgreSQL的变量赋值仅支持在PL/pgSQL的过程化代码块中执行。 SELECT COUNT(*) INTO deletedRowCount会将CTE查询得到的计数结果直接存入deletedRowCount变量。
如果你的需求只是获取删除的行数,不需要返回具体的ID,还可以用更简洁的方式,借助GET DIAGNOSTICS获取操作影响行数:
DECLARE deletedRowCount integer; BEGIN DELETE FROM MyTable "t" USING tmp_closed_positions WHERE condition; GET DIAGNOSTICS deletedRowCount = ROW_COUNT; RAISE NOTICE '删除的行数:%', deletedRowCount; END;
这种方式无需CTE,直接通过ROW_COUNT获取DELETE操作的受影响行数,执行效率更高。
内容的提问来源于stack exchange,提问作者Liero
相关产品推荐
相关产品推荐

