多个返回值的 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 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

C语言返回多个值的方法

从函数调用分配多个返回值的性能[重复]

lua入门之二:c/c++ 调用lua及多个函数返回值的获取

如何让lua调用一个向lua返回多个值的c++函数

如何使用具有多个返回值的python赋值运算符