db2数据库存储过程入门5

例7:

--在存储过程中使用简单游标,返回临时表中的数据
create procedure test13(in sid integer,out result varchar(32000))
language sql
begin

 declare num        integer;
 declare r_id       integer;
 declare r_parentid integer;
 declare r_name     varchar(400);
 declare r_num      integer;
 declare global temporary table session.dtdoctype
 (
  id integer,
  parentid integer,
  name varchar(300)
 );
 set result ='';--没有这行,则显示不了结果,结果为空,参数值为-
 --查询表dtdoctype中的数据,插入到临时表session.dtdoctype中
 insert into session.dtdoctype select id,parentid,name from dtdoctype where parentid = sid;
 select count(*) into num from session.dtdoctype;
 begin
  --将临时表session.dtdoctype中的所有数据存到游标Ydtdoctype中
  --with return将结果集返回
  declare Ydtdoctype cursor with return for select * from session.dtdoctype;
  open Ydtdoctype;--打开游标
 
  while(num>0)
  do
   fetch Ydtdoctype into r_id,r_parentid,r_name;
   select count(*) into r_num from dtdoctype where parentid = r_id;
   set result = concat(result,strip(DIGITS(r_id))); 
   set result = concat(result,'|');
   set result = concat(result,strip(DIGITS(r_parentid)));
   set result = concat(result,'|');
   set result = concat(result,r_name);
   set result = concat(result,'|');
   set result = concat(result,strip(DIGITS(r_num)));
   set result = concat(result,';');
   set num=num-1;
  end while;
  --没有下面这行,在第二次执行call test(0,?)查询时候就会报异常:
  --SQL0950N 不能删除表或索引,因为当前正在使用. SQLSTATE=55006
  close Ydtdoctype;
 end;
 drop table session.dtdoctype;
end;

你可能感兴趣的:(db2数据库存储过程入门5)