例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;