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