Я предполагаю, что ваша хранимая процедура возвращает открытый курсор, поэтому вы хотите использовать этот курсор, вставляя его содержимое в таблицу сеансов (объявленную глобальной временной таблицей) в Db2-LUW.
В дополнение кдля извлечения и вставки операторов необходимо понимать следующие операторы:
ассоциировать указатель набора результатов ... с процедурой ...
allocate ...курсор для набора результатов ...
Вот намеренно искусственный пример вложенной хранимой процедуры, которая показывает выборку набора результатов из вложенной процедуры в таблицу сеанса.Цель состоит в том, чтобы показать, как работает синтаксис, а не делать что-либо полезное с данными (поскольку в этом случае чистый эффект может быть одинаково встречен простой очередью каталога).Этот пример можно запустить из командной строки Db2 (например, в оболочке bash после подключения к базе данных с соответствующими разрешениями):
update command options using s on ;
--#SET TERMINATOR @
create or replace procedure alltabs
dynamic result sets 1
language sql
specific alltabs
begin
declare v_cur cursor with return to caller for select tabschema,tabname,type from syscat.tables ;
open v_cur;
end@
declare global temporary table session.thetables(tabschema varchar(128), tabname varchar(128))
not logged with replace on commit preserve rows @
create or replace procedure populate_dgtt()
language sql
specific populate_dgtt
begin
declare v_rs result_set_locator varying;
declare v_tabschema varchar(128);
declare v_tabname varchar(128);
declare v_type char(1);
declare sqlstate char(5) default '00000';
call alltabs;
associate result set locator (v_rs) with procedure alltabs;
allocate v_rscur cursor for result set v_rs;
fetch from v_rscur into v_tabschema, v_tabname, v_type;
while ( sqlstate = '00000') do
if v_type='V' and v_tabschema='SYSSTAT'
then
insert into session.thetables(tabschema,tabname) values (v_tabschema, v_tabname);
end if;
fetch from v_rscur into v_tabschema, v_tabname, v_type;
end while;
return;
end@
call populate_dgtt()@
select rtrim(Tabschema)||'.'||rtrim(tabname) from session.thetables @