Вы должны указать свою платформу и версию Db2 ...
Однако я не думаю, что здесь что-то изменится.
Способ, которым Db2 возвращает строки из Определенного пользователемТабличная функция (UDTF) или хранимая процедура по этому вопросу завершается курсором, определенным внутри функции / процедуры, оставленной открытой.
Так что вам нужно что-то вроде этого ...
CREATE FUNCTION BELSIZE.TEST (aSTRING VARCHAR(50))
RETURNS TABLE(
column1 INTEGER
, column2 INTEGER
, column3 VARCHAR(50)
)
begin atomic
declare C1 cursor with return to client for
With v (column1, column2, column3) as (
VALUES (1, 10231011, 'PRINCIPAL')
, (1, 10231012, 'ADDITIONAL')
, (-1, 10231031, 'REDEEM')
) select * from v;
declare C2 cursor with return to client for
With v (column1, column2, column3) as (
VALUES (1, 10231011, 'PRINCIPAL 456')
, (1, 10231012, 'ADDITIONAL 456')
, (-1, 10231031, 'REDEEM 456')
) select * from v;
IF v_string = '123' THEN
open C1;
else
open C2;
END IF;
RETURN
END