日期:2014-05-17  浏览次数:20733 次

请教 存储过程中,如何返回一个游标类型??
现在需求是这样,需要封装一个方法,里面对一个表进行查询,由于结果肯定是多条,所以需要返回一个游标类型
请问前辈,我在定义方法的时候,这个参数类型是不是写 cursor??
比如
function sel_xxx_by_id(v_cursor OUT cursor)

另外在调用的地方应该怎么写?

------解决方案--------------------
SQL code
EMP数据库例子
CREATE OR REPLACE PROCEDURE P_RETR_CURSOR
(P_ID IN NUMBER,
P_RECSET OUT SYS_REFCURSOR) AS
BEGIN
OPEN P_RECSET FOR
SELECT e.empno,e.ename
FROM emp e
WHERE empno = P_ID;
END;

DECLARE
I NUMBER;
S VARCHAR2(100);
M SYS_REFCURSOR;
BEGIN
FOR J IN 7900..7902 LOOP
P_RETR_CURSOR(J, M);
FETCH M
INTO I, S;
DBMS_OUTPUT.PUT(I || '-');
DBMS_OUTPUT.PUT_LINE(S);
CLOSE M;
END LOOP;
END;
/

------解决方案--------------------
function sel_xxx_by_id(v_cursor OUT cursor),这是函数,不是过程。


过程返回结果集,
procedure proc_name
(...
po_result sys_refcursor)
is
...


至于调用,不同的调用环境有不同的方法。