oracle 函数中调用存储过程

本文记录在Oracle数据库中如何在函数里调用存储过程并处理其返回的游标。由于原始方法是通过拼接SQL,但考虑业务逻辑变更可能导致遗漏,作者探索了在函数内部直接处理存储过程结果的方法,最终成功实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  项目中开发了一个存储过程来给报表提供数据源,而程序业务逻辑中需要有一个对该数据源进行判断的功能,开始是使用拼接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 --外采配置
  
  from
  --到站计划
  (select p.oil_code,p.oil_name
          ,sum(p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值