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

来源:互联网 发布:python 打开txt文件 编辑:程序博客网 时间:2024/05/22 02:15
因为项目需要,需要写一个存储过程在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 ASPROCEDURE up_defectsCount(startdate in date, enddate in date, p_cur out CUR_defectsCount) ISsqlString varchar2(1000);BEGINsqlString := '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 ,填上输入参数,执行后下面的游标那行后面有个[...]的按钮,点开就能看到啦~
原创粉丝点击