oracle存储过程中使用游标作为out类型参数,求救!

先在包中定义了一个游标:--将数据类型REF_CURSOR定义在自定义的程序包中pkg_constCREATEORREPLACEPACKAGEPKG_CONSTASTYP... 先在包中定义了一个游标:
--将数据类型 REF_CURSOR 定义在自定义的程序包中pkg_const
CREATE OR REPLACE PACKAGE PKG_CONST AS
TYPE REF_CURSOR IS REF CURSOR;
END PKG_CONST;

然后在存储过程中使用该游标类型参数作为out型参数
CREATE OR REPLACE PROCEDURE GET_EMPINFOBYDEPNO(IN_DEPNO IN NUMBER,
OUT_EMPINFO OUT PKG_CONST.REF_CURSOR) AS

BEGIN
OPEN OUT_EMPINFO FOR
SELECT EMPNO, ENAME FROM EMP WHERE DEPTNO = IN_DEPNO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('获取员工信息发生错误');
END GET_EMPINFOBYDEPNO;
/

***以上两步均操作成功,问题出在第三步,我在执行这个存储过程时报错:open那行的游标变量定义错误,请高手指点

SET serveroutput ON;

DECLARE
RET_CURSOR_VALUE PKG_CONST.REF_CURSOR;
RET_EMPNO EMP.EMPNO%TYPE;
RET_ENAME EMP.ENAME%TYPE;
BEGIN
GET_EMPINFOBYDEPNO(1, RET_CURSOR_VALUE);
OPEN RET_CURSOR_VALUE ;--报游标类型有误,未解决!!!
LOOP
FETCH RET_CURSOR_VALUE
INTO RET_EMPNO, RET_ENAME;
EXIT WHEN RET_CURSOR_VALUE%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('empNo is:' || RET_EMPNO || ',empName is' ||
RET_ENAME);
END LOOP;
CLOSE RET_CURSOR_VALUE;
END;
请直接解决此问题。。用sys_refcursor搞不定。。。
展开
 我来答
奔驰M888
2009-07-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1846
采纳率:0%
帮助的人:2707万
展开全部
1、你定义的【RET_CURSOR_VALUE】是一个光标变量,当他作为参数传入过程【GET_EMPINFOBYDEPNO】时候已经被打开(就是open...for),在主程序中再度打开是没有必要的也是错误的(且光标变量只能用【open...for】的形式打开)。
2、所以把【OPEN RET_CURSOR_VALUE】这句话删掉,就没有问题了。

*******************************
口说无凭,oracle实施log请参照:
说明:我把empno改成20了(因为表里面没有1的数据),还有把open语句注掉了。
*******************************
[SCOTT@ORA1] SQL>DECLARE
2 RET_CURSOR_VALUE PKG_CONST.REF_CURSOR;
3 RET_EMPNO EMP.EMPNO%TYPE;
4 RET_ENAME EMP.ENAME%TYPE;
5 BEGIN
6 GET_EMPINFOBYDEPNO(20, RET_CURSOR_VALUE);
7 --OPEN RET_CURSOR_VALUE ;--报游标类型有误,未解决!!!
8 LOOP
9 FETCH RET_CURSOR_VALUE
10 INTO RET_EMPNO, RET_ENAME;
11 EXIT WHEN RET_CURSOR_VALUE%NOTFOUND;
12 DBMS_OUTPUT.PUT_LINE('empNo is:' || RET_EMPNO || ',empName is' ||
13 RET_ENAME);
14 END LOOP;
15 CLOSE RET_CURSOR_VALUE;
16 END;
17 /
empNo is:7369,empName isSMITH
empNo is:7566,empName isJONES
empNo is:7902,empName isFORD

---
以上,希望对你有所帮助。
仁科信息
2024-07-24 广告
Oracle EBS运维是确保企业资源规划系统稳定、高效运行的关键环节。它涵盖了系统监控、性能优化、故障排查与恢复等多方面内容。通过持续的监控和数据分析,运维团队能够及时发现并解决潜在问题,保障系统的稳定性和安全性。同时,他们还需要与业务部... 点击进入详情页
本回答由仁科信息提供
百度网友f2a99ee
2009-07-16 · TA获得超过175个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:170万
展开全部
感觉你是不是简单问题复杂化了
弱ref cursor 一般用sys_refcursor去定义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
csuxp2008
2009-07-16 · TA获得超过6485个赞
知道大有可为答主
回答量:4704
采纳率:50%
帮助的人:2467万
展开全部
本来一个PL/SQL程序块就能搞定的问题,你偏偏要加上包以及过程,没必要嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式