如何将存储过程的结果 table 转换为临时文件 table?
How to get the restult table of a stored procedure into a temp table?
环境:
- DB2 版本 11.1,
- OS - Linux
如何将存储过程的结果 table 保存到临时 table 中?
table和结果有相同的table配置(firstColumn int, secondColumn nvarchar(255)
)
我假设您的存储过程 returns 是一个打开的游标,因此您想使用该游标,将其内容插入会话 table(声明为全局临时 table)在 Db2-LUW 上。
除了fetch和insert语句,你还需要了解以下语句:
associate result set locator ... with procedure ...
allocate ... cursor for result set ...
这里是嵌套存储过程的一个故意人为的示例,它显示了从嵌套过程中获取结果集到会话中 table。目的是展示语法的工作原理,而不是对数据做任何有用的事情(因为在这种情况下,简单的目录查询同样可以满足净效果)。此示例可以是 运行 在 Db2 命令行(例如在 bash shell,在您连接到具有适当权限的数据库之后):
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 @
环境:
- DB2 版本 11.1,
- OS - Linux
如何将存储过程的结果 table 保存到临时 table 中?
table和结果有相同的table配置(firstColumn int, secondColumn nvarchar(255)
)
我假设您的存储过程 returns 是一个打开的游标,因此您想使用该游标,将其内容插入会话 table(声明为全局临时 table)在 Db2-LUW 上。
除了fetch和insert语句,你还需要了解以下语句:
associate result set locator ... with procedure ...
allocate ... cursor for result set ...
这里是嵌套存储过程的一个故意人为的示例,它显示了从嵌套过程中获取结果集到会话中 table。目的是展示语法的工作原理,而不是对数据做任何有用的事情(因为在这种情况下,简单的目录查询同样可以满足净效果)。此示例可以是 运行 在 Db2 命令行(例如在 bash shell,在您连接到具有适当权限的数据库之后):
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 @