如何在MariaDB中存储DELETE语句RETURNING *返回的结果
你的写法核心逻辑是对的,RETURNING *确实可以返回DELETE操作移除的所有行数据,问题出在赋值的语法需要适配不同的使用场景,对应修正方案如下:
PL/pgSQL 存储过程/函数内赋值(最常用场景)
你之前用:=直接赋值的写法不符合PL/pgSQL的语法规范,DML语句的返回结果需要用INTO子句导入变量:
- 只删除单行时,用行类型变量接收:
DECLARE -- 声明和表结构完全匹配的行类型变量 newData ATableName%ROWTYPE; BEGIN DELETE FROM ATableName WHERE AColumnName = 100 RETURNING * INTO newData; -- 后续可以直接调用newData的字段,比如newData.AColumnName END;
- 可能删除多行时,用行类型数组接收:
DECLARE newData ATableName%ROWTYPE[]; BEGIN DELETE FROM ATableName WHERE AColumnName = 100 RETURNING * INTO ARRAY newData; END;
普通SQL会话临时存储
如果是在psql等数据库客户端直接执行,可以把删除结果存入临时表,当前会话内随时可查:
WITH deleted_rows AS ( DELETE FROM ATableName WHERE AColumnName = 100 RETURNING * ) SELECT * INTO TEMP TABLE newData FROM deleted_rows;
应用代码内接收
如果是在业务代码中执行SQL,直接将带RETURNING的DELETE语句作为查询语句执行,读取返回的结果集存入代码变量即可,不需要额外的SQL侧赋值逻辑。
内容的提问来源于stack exchange,提问作者N. Smeding
相关产品推荐
相关产品推荐

