oracle使用游标让存储过程返回记录集

因为项目需要,需要写一个存储过程在oracle上,返回的是记录集,普通的存储过程貌似不可以,按照网上说的用游标写了一个出来,如下:
--声明包头
CREATE OR REPLACE PACKAGE PACK_defectsCount AS
  TYPE CUR_defectsCount IS REF CURSOR;
  PROCEDURE up_defectsCount(startdate in date,
                            enddate   in date,
                            p_cur     out CUR_defectsCount);
END PACK_defectsCount;

--声明包体
CREATE OR REPLACE PACKAGE BODY PACK_defectsCount AS
PROCEDURE up_defectsCount(startdate in date, enddate in date, p_cur out CUR_defectsCount) IS
sqlString varchar2(1000);
BEGIN
sqlString := 'SELECT
          '''' abbreviation,
          '''' FindCount,
          '''' CompleteCount,
          '''' OvertimeCount,
          '''' CompleteRate,
          '''' FindCount1,
          '''' CompleteCount1,
          '''' OvertimeCount1,
          '''' CompleteRate1,
          '''' FindCount2,
          '''' CompleteCount2,
          '''' OvertimeCount2,
          '''' CompleteRate2,
          '''' FindCount3,
          '''' CompleteCount3,
          '''' OvertimeCount3,
          '''' CompleteRate3
   
    FROM dual
    WHERE :startdate = :startdate
      AND :enddate = :enddate';
    OPEN p_cur FOR sqlString USING startdate,startdate,enddate,enddate;
END up_defectsCount;
END PACK_defectsCount;
然后大概的解释下,在包头文件中定义的cursor就是游标类型,然后是存储过程的输入输出参数,下面就是包体,执行时要包头包体分开执行,下面只是我随意写的一个SQL只是为了有字段而已(是from dual表的,赋的空值),参数那边也是为了试试参数是否传递过来构造的一个类似1=1的效果,open sql的时候因为我这样写的所以参数各被调用二次,实际上应该是一次就可以的,还有就是如果你的SQL短的话可以不定义变量再open,直接放到open 'sql' using param也一样的,其他没什么要说的了,照葫芦画瓢就OK。测试的时候在PLSQL下对应的package bodies,然后右键view你的package然后选到procedure右键test ,填上输入参数,执行后下面的游标那行后面有个[...]的按钮,点开就能看到啦~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值