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

ObjectScript/Intersystems IRIS中如何正确执行无返回值的存储过程

问题原因

你当前使用的ExecuteQuery方法仅适用于执行有结果集返回的查询类语句,而你调用的是无结果集返回的删除类存储过程,SQL网关无法获取预期的结果集就会抛出Error #5023 Remote Gateway Error. The statement did not return a resultset.错误。

解决方案

优先推荐使用适配无结果集语句的ExecuteUpdate方法,该方法用于执行INSERT、UPDATE、DELETE类操作以及无返回结果的存储过程,仅返回语句执行状态和影响行数,不会要求返回结果集:

Set tQuery = "EXEC MY_PROC @name = 'Jhon', @profession = 'carpenter'"
// 第一个输出参数返回存储过程执行影响的行数
Set tSC = ..Adapter.ExecuteUpdate(.tAffectedRows, tQuery)

// 可选:增加执行状态校验逻辑
If $$$ISERR(tSC) {
    // 自定义错误处理逻辑
}

如果希望使用ExecuteProcedure方法调用,需要按参数数组形式传递参数,不要直接拼接EXEC语句:

// 按存储过程的参数定义顺序传入参数值
Set tParams(1) = "Jhon"
Set tParams(2) = "carpenter"
Set tSC = ..Adapter.ExecuteProcedure("MY_PROC", .tParams, .tOutput)

SQL Server数据库特殊适配

如果你使用的目标库是SQL Server,还可以在存储过程开头增加SET NOCOUNT ON语句,或者拼接在执行语句前,避免数据库返回的行数计数被网关误判为无效结果集:

// 拼接SET NOCOUNT ON避免多余计数返回
Set tQuery = "SET NOCOUNT ON; EXEC MY_PROC @name = 'Jhon', @profession = 'carpenter'"
Set tSC = ..Adapter.ExecuteUpdate(.tAffectedRows, tQuery)

内容的提问来源于stack exchange,提问作者Luiz Antonio Negrinho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:39:00