使用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
相关产品推荐
相关产品推荐

