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 @