如何将存储过程的结果 table 转换为临时文件 table?

How to get the restult table of a stored procedure into a temp table?

环境:

如何将存储过程的结果 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 @