gpt4 book ai didi

c++ - 将 Informix Object Interface for C++ 用于不带参数的存储过程/函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:12 27 4
gpt4 key购买 nike

很简单——有没有一种方法可以使用这个库来调用存储过程或函数,返回多个结果?我知道 ITRoutingManager,但它似乎只返回一个值..

详细来说,这就是我的意思:

CREATE FUNCTION test_out1( pin INT )
RETURNING INT;

DEFINE param INT;
LET param = 321;

RETURN param;

END FUNCTION;

返回 321,我可以通过 ITValueITConversions 获取值。所以这很好。但以下不是:

CREATE FUNCTION test_out2( pin INT )
RETURNING INT, INT;

DEFINE param INT;
LET param = 321;

DEFINE param2 INT;
LET param2 = 123;

RETURN param, param2;

END FUNCTION;

当我执行 routine.GetRoutine( "function test_out2( int )") 时,它绑定(bind)正常,所以没有问题。但是看到这个:

std::cout << "Result type: " << routine.ResultType()->Name() IsRow() ? "row, " : ", " )
<< (routine.ResultType()->IsCollection() ? "collection, " : ", " )
<< routine.ResultType()->Quality() << "\n\n";

打印 integer, , , null注意整数.. 例如,为什么是整数,而不是行。以及如何获取函数返回的 2 个值?另一个有趣的事实 - 返回值是 0(当我使用 ITConversions 类将它转换为 int 时),不是 123,也不是 321。 .

一定有办法的。这是一个特殊的库,由 Informix 开发人员为 Informix 服务器编写,如果这不可能,那就太奇怪了。

函数也一样,但我想它在那里也是一样的。


注意:对于 informix 过程/函数 ( Informix: procedure with output parameters? ),通常情况下没有 out 参数之类的东西

最佳答案

如您所见,Informix 实际上并没有“OUT”参数;它返回值。

在常规 ESQL/C 中,您将输出值列表与输入值列表对称地对待;因此,我希望对这段代码做同样的事情。无论您使用何种技术将 2 个参数传递给函数,都可能(但绝不保证)是您获得多个返回值的方式。

如有疑问,请像对待返回多行的 SELECT 语句一样对待它。也就是说,执行类似的操作:

 PREPARE s FROM "EXECUTE PROCEDURE test_out2(?)";
DECLARE c CURSOR FOR s;
OPEN c USING :input_value;
while (sqlca.sqlcode == 0)
{
FETCH c INTO :out_value1, :out_value2;
if (sqlca.sqlcode != 0)
break;
...use values...
}
CLOSE c;
FREE c;
FREE s;

我建议使用 ODBC 而不是 OIC++。 OIC++ 接口(interface)建立在另一个库 DMI 之上,而 DMI 又建立在另一个访问 DBMS 的库之上——我忘记它是基于 ESQL/C 还是基于 ODBC,或者是建立在这些库之上的核心库之一.使用 unixODBC 作为驱动程序管理器和合适的 ODBC 驱动程序对我来说比使用 OIC++ 更有意义。


我真的不知道在 OIC++ 中是什么样子;我从未使用过它,只是对它进行了一些粗略的维护。

总的来说,最好不要将 OIC++ 用于新工作。 Informix 继续分发它是为了向后兼容,而不是鼓励新的使用。

关于c++ - 将 Informix Object Interface for C++ 用于不带参数的存储过程/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com