项目中开发了一个存储过程来给报表提供数据源,而程序业务逻辑中需要有一个对该数据源进行判断的功能,开始是使用拼接sql的方式在存储过程中对应sql的外面包装一层来进行处理,但是觉得这种方式拼接的sql太长,而且以后业务逻辑改变要同时修改存储过程和代码,容易发生遗漏,故产生了在函数中处理存储过程的结果(游标)的想法。但是在网上搜索发现对存储过程返回的游标进行处理的例子很少,自己弄了半天终于成功了,在此记录一下。
存储过程plan_station_contrast
create or replace procedure plan_station_contrast(
groupid in varchar2 ,--到站计划主表id,非空
refCursor out sys_refcursor)
is
planDate varchar2(6);--计划年月
deptCode varchar2(10);--上报单位编码
begin
select p.plan_date,p.dept_code into planDate,deptCode from p_station_group p where id=to_number(groupid);
open refcursor for 'select nvl(station.oil_code,config.oil_code) oilCode,nvl(station.oil_name,config.oil_name) oilName
,nvl(station.planQuantity,0) planQuantity --到站上报
,nvl(station.configStock,0) configStock --外采上报
,nvl(config.configQuantity,0) configQuantity --直炼配置
,nvl(config.stockQuantity,0) stockQuantity