多个返回值的 ODBC 调用语法
Posted
技术标签:
【中文标题】多个返回值的 ODBC 调用语法【英文标题】:ODBC Call Syntax for multiple return values 【发布时间】:2011-09-29 13:18:27 【问题描述】:首先,抱歉问题的长度......
所以基本上我在从 Informix 数据库调用存储过程时遇到问题,其中存储过程具有多个返回值,同时在 .NET 中使用 ODBC(又名 ODBCCommand),我在互联网上没有看到任何以前有人这样做过……那有可能吗?
所以首先使用 ODBCCommand(或一般的 ODBC)来调用您应该使用 ODBC Call Syntax 的 SP。
粗略的存储过程:
create procedure informix.proc_ins (
n_company char(10),
n_message_body lvarchar(4096),
n_time int,
n_time_dt datetime year to second,
n_processed smallint)
returning
int,
int;
begin
define row_count int;
define new_serial int;
INSERT into my_table ( company, message_body, time, time_dt, processed, create_user, create_dt, recmod_user, recmod_dt)
VALUES ( n_company, n_message_body, n_time, n_time_dt, n_processed, USER, CURRENT YEAR TO SECOND, USER, CURRENT YEAR TO SECOND);
let new_serial = DBINFO('sqlca.sqlerrd1');
let row_count = DBINFO('sqlca.sqlerrd2');
return
new_serial,
row_count;
end
end procedure;
因此,鉴于此 SP,ODBC 调用语法将类似于:
XXXX = call informix.proc_ins(?,?,?,?,?)
'XXXX' 不知何故有 2 个'?'s...?
对此的任何帮助将不胜感激。
在有人说“使用 IBM.Data.Informix 驱动程序”(其中任何一个驱动程序)之前,在这种情况下这是不可能的,因为“旧”驱动程序不适用于 VS2010,而新驱动程序不能同时安装在与旧 PC 相同的 PC 上,但这是另一天完全不同的咆哮。
【问题讨论】:
【参考方案1】:我在 ESQL/C 中执行此操作的方式是将 EXECUTE PROCEDURE informix.proc_ins(...)
语句视为 SELECT 语句 - 也就是说,声明一个游标(可能在准备语句之后),然后使用 OPEN(机会传入参数)和 FETCH 和 CLOSE 来获取数据。
我希望在 ODBC 中使用相同的技术 - 可能会绕过一般的 ODBC 调用语法。
如果您需要使用官方 ODBC 表示法/方法的官方答案,则必须让其他人提供答案。
【讨论】:
嗯..我会在.NET中尝试类似的东西,看看效果如何。【参考方案2】:我不相信有“官方”的 ODBC 答案。归根结底是司机。没有什么可以阻止您使用 SQL_PARAM_RETURN 作为多个参数的类型,但至于如何调用它,ODBC 没有说明。
【讨论】:
以上是关于多个返回值的 ODBC 调用语法的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )