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

[复制链接]
查看11 | 回复3 | 2009-7-16 18:47:51 | 显示全部楼层 |阅读模式
先在包中定义了一个游标:
--将数据类型 REF_CURSOR 定义在自定义的程序包中pkg_const
CREATE OR REPLACE PACKAGE PKG_CONST AS
TYPE REF_CURSOR IS REF CURSOR;
ENDPKG_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_VALUEPKG_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搞不定。。。

回复

使用道具 举报

千问 | 2009-7-16 18:47:51 | 显示全部楼层
1、你定义的【RET_CURSOR_VALUE】是一个光标变量,当他作为参数传入过程【GET_EMPINFOBYDEPNO】时候已经被打开(就是open...for),在主程序中再度打开是没有必要的也是错误的(且光标变量只能用【open...for】的形式打开)。2、所以把【OPEN RET_CURSOR_VALUE】这句话删掉,就没有问题了。*******************************口说无凭,oracle实施log请参照:说明:我把empno改成20了(因为表里面没有1的数据),还有把open语句注掉了。*******************************[SCOTT@ORA1] SQL>DE...
回复

使用道具 举报

千问 | 2009-7-16 18:47:51 | 显示全部楼层
感觉你是不是简单问题复杂化了 弱ref cursor 一般用sys_refcursor去定义...
回复

使用道具 举报

千问 | 2009-7-16 18:47:51 | 显示全部楼层
本来一个PL/SQL程序块就能搞定的问题,你偏偏要加上包以及过程,没必要嘛...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行