Это просто - есть ли способ использовать эту библиотеку для вызова хранимой процедуры или функции, которая возвращает более одного результата? Я знаю о ITRoutingManager
, но, похоже, он возвращает только одно значение.
В деталях, вот что я имею в виду:
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 значения, возвращаемые функцией? Еще один интересный факт - возвращаемое значение равно 0 (когда я конвертирую его в int
, используя класс ITConversions
), а не 123 и не 321..
Должен быть способ. Это специальная библиотека, написанная для серверов Informix разработчиками Informix и было бы странно, если бы это было невозможно.
То же самое для функций, но я думаю, что там то же самое.
ПРИМЕЧАНИЕ. В общем случае нет таких параметров, как выходные параметры, для процедур/функций informix (Informix: процедура с выходными параметрами?)