+ -
当前位置:首页 → 问答吧 → oracle存储过程返回ref cursor 怎么显示呢?

oracle存储过程返回ref cursor 怎么显示呢?

时间:2011-12-10

来源:互联网

CREATE OR REPLACE PACKAGE CURSPKG AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR IN OUT T_CURSOR);
PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
DEPTCURSOR OUT T_CURSOR);
END CURSPKG;



CREATE OR REPLACE PACKAGE BODY CURSPKG AS
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR IN OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
IF N_EMPNO <> 0
THEN
OPEN V_CURSOR FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.EMPNO = N_EMPNO;

ELSE
OPEN V_CURSOR FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

END IF;
IO_CURSOR := V_CURSOR;
END OPEN_ONE_CURSOR;

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
DEPTCURSOR OUT T_CURSOR)
IS
V_CURSOR1 T_CURSOR;
V_CURSOR2 T_CURSOR;
BEGIN
OPEN V_CURSOR1 FOR SELECT * FROM EMP;
OPEN V_CURSOR2 FOR SELECT * FROM DEPT;
EMPCURSOR := V_CURSOR1;
DEPTCURSOR := V_CURSOR2;
END OPEN_TWO_CURSORS;
END CURSPKG;
/
以上是建包和建存储过程

--下面是调用 用了很多办法都得不到
declare
  type emp_cursor is ref cursor;
  type dept_cursor is ref cursor;
  v_emp emp_cursor;
  v_dept dept_cursor; 
begin
  scott.curspkg.OPEN_TWO_CURSORS(v_emp,v_dept);
  for rec in v_emp loop
  dbms_output.put_line(rec.empno);
  end loop;
end;
总是提示报早不到 v_emp 如果是函数或许可以解决吧但是这是存储过程啊,看到无数个傻B 拿函数的帖子冒充存储过程
真无语,在线求高人给解决了!

作者: leoricxu   发布时间: 2011-12-10

在线求人解决呀!真郁闷

作者: leoricxu   发布时间: 2011-12-10

怎么连个高人都没有啊!

作者: leoricxu   发布时间: 2011-12-10