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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章