想通过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,enddate;
END up_defectsCount;
END PACK_defectsCount;
查看 测试时,传入startdate,enddate,执行一直报错:"enddate":标识符无效,黄色标识是标在
OPEN p_cur FOR sqlString USING startdate,enddate;这行,求助我这哪里写的有问题吗,折腾好久了,关于这个的例子也不是很多,灰常捉急。
oracle cursor 存储
------解决方案--------------------
dual中没有startdate和enddate这两个字段。
------解决方案--------------------
:= 是pl/sql的赋值操作
:A 是绑定变量。
where :A = :A 是不行的。
你可以把dual后面的条件改成 where to_date('2013/10/17','yyyy/mm/dd') = :startdate 之类。