You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:48:01