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

使用Dapper获取Oracle多值输出参数的问题求助

解决Oracle多行更新后获取所有DocId的问题

问题原因

当Oracle的UPDATE ... RETURNING语句返回多行数据时,单个输出参数无法接收多行结果,会触发ORA-24369错误——这是因为Oracle需要绑定支持多行返回的回调逻辑,而Dapper的ExecuteAsync搭配单个输出参数的方式不支持这种场景。

解决方案

改用QueryAsync方法直接获取返回的所有DocId,不需要使用输出参数,具体代码如下:

string cmd = "UPDATE MyTable SET Status='A' WHERE CaseId='123' RETURNING DocId";
var updatedDocIds = await db.QueryAsync<string>(cmd);
// updatedDocIds就是所有被更新行的DocId集合,可直接遍历使用

补充说明

  • 如果需要动态传递参数(比如可变的CaseId),用Dapper参数化查询避免SQL注入:
string cmd = "UPDATE MyTable SET Status='A' WHERE CaseId=@CaseId RETURNING DocId";
var parameters = new { CaseId = "123" };
var updatedDocIds = await db.QueryAsync<string>(cmd, parameters);
  • 这种方式是让Oracle把更新后的DocId作为结果集返回,Dapper的QueryAsync可以直接解析这个结果集,完美适配多行更新的场景,不会触发ORA-24369错误。

内容的提问来源于stack exchange,提问作者ommmmmm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:04:54