Stored procedures 如何将存储过程的result表放入临时表中?
环境:Stored procedures 如何将存储过程的result表放入临时表中?,stored-procedures,db2,db2-luw,Stored Procedures,Db2,Db2 Luw,环境: DB2版本11.1 操作系统Linux 如何将存储过程的结果表放入临时表中 表和结果具有相同的表配置(firstColumn int,secondColumn nvarchar(255))我假设存储过程返回一个打开的游标,因此您希望使用该游标,将其内容插入DB2LUW上的会话表(声明的全局临时表) 除fetch和insert语句外,您还需要了解以下语句: 下面是嵌套存储过程的一个人为示例,它显示如何将结果集从嵌套过程中提取到会话表中。其目的是展示语法是如何工作的,而不是对数据做任
- DB2版本11.1
- 操作系统Linux
表和结果具有相同的表配置(
firstColumn int,secondColumn nvarchar(255)
)我假设存储过程返回一个打开的游标,因此您希望使用该游标,将其内容插入DB2LUW上的会话表(声明的全局临时表)
除fetch和insert语句外,您还需要了解以下语句:
下面是嵌套存储过程的一个人为示例,它显示如何将结果集从嵌套过程中提取到会话表中。其目的是展示语法是如何工作的,而不是对数据做任何有用的事情(在本例中,简单的目录查询同样可以满足净效果)。此示例可以在Db2命令行上运行(例如,在使用适当的权限连接到数据库之后,在bash shell上运行):
如果我增加了“insert into session.thetables(tabschema,tabname)值(v_tabschema,v_tabname);”若要
设置newDeclaratedVariable=v_tabname
,过程将永不停止。在DB2Studio中,状态是“已启动”且从不停止。更改回插入到
-行,效果良好。这两行的区别是什么?@michaelmammut,与INSERT不同,SET
语句不会影响表。最好是问一个新问题,在一个小示例中显示所有代码,因为后续问题不适合评论。如果您有一个不会停止的循环,那么代码中可能有错误。您还可以在DataStudio中调试您的过程。
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 @