簡単です-このlibを使用して、複数の結果を返すストアドプロシージャまたは関数を呼び出す方法はありますか?については知っていますがITRoutingManager
、1つの値しか返されないようです。
詳細には、これが私が意味することです:
CREATE FUNCTION test_out1( pin INT )
RETURNING INT;
DEFINE param INT;
LET param = 321;
RETURN param;
END FUNCTION;
を返します。と 321
で値を取得できます。だからこれは大丈夫です。しかし、以下はそうではありません:ITValue
ITConversions
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 )" )
、それはうまくバインドされているので、それで問題ありません。しかし、これを参照してください:
std::cout << "Result type: " << routine.ResultType()->Name() IsRow() ? "row, " : ", " )
<< (routine.ResultType()->IsCollection() ? "collection, " : ", " )
<< routine.ResultType()->Quality() << "\n\n";
印刷します。整数integer, , , null
に注意してください。たとえば、行ではなく整数であるのはなぜですか。そして、関数によって返される2つの値を取得する方法は?もう1つの興味深い事実-戻り値は0int
(クラスを使用してに変換した場合ITConversions
)であり、123でも321でもありません。
方法がなければなりません。これは、Informix開発者によってInformixサーバー用に作成された特別なライブラリであり、これが不可能な場合は奇妙なことになります。
関数についても同じですが、同じだと思います。
注:informixのプロシージャ/関数(Informix:出力パラメータを使用したプロシージャ?)の場合、一般的なケースではoutパラメータなどはありません。