请教oracle sys_refcursor 问题
Sys_refcursor可以在存储过程中循环填入结果集吗,比如多个select,怎么写?如表字段为主键recordid,学生人数studentnum,注册时间regti...
Sys_refcursor 可以在存储过程中循环填入结果集吗,比如多个select ,怎么写? 如表字段为 主键recordid , 学生人数studentnum , 注册时间regtime , 按注册时间形成以每天为单位的一个月的人数统计结果 , 或以每十分钟为单位的一天的统计结果 , 存储过程 ,怎么写 。 谢谢 。
展开
展开全部
可以把多个select语句循环拼起来,最后一次性动态执行sql,将结果集放入游标中
数据量大的话,可以考虑bulk collect的方式处理结果集
数据量大的话,可以考虑bulk collect的方式处理结果集
追问
怎么写?
追答
没怎么看明白你要的结果集是什么形式,大体实现方式如下,希望是你要的结果
--按注册时间形成以每天为单位的一个月的人数统计结果 :
select max(注册时间) into 注册时间最大值 from tblX;
select months_add(注册时间最大值,-1) into 注册时间最大值的前一个月 from dual;
sql1:
select sum(学生人数)
from tblX
where 注册时间 between 注册时间最大值 and 注册时间最大值的前一个月
--按每十分钟为单位的一天的统计结果 :
select max(注册时间) into 注册时间最大值 from tblX;
select to_char(注册时间最大值,'yyyy-mm-dd') into 注册时间的当天日期 from dual;
sql2:
select sum(学生人数)
from tblX
where to_char(注册时间,'yyyy-mm-dd')=注册时间的当天日期;
--动态SQL拼接
sql:=sql1 || " union " || sql2;
--将多个SQL的结果集放到Sys_refcursor 中
open Sys_refcursor for 执行动态SQL;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询