现在需求是这样,需要封装一个方法,里面对一个表进行查询,由于结果肯定是多条,所以需要返回一个游标类型
请问前辈,我在定义方法的时候,这个参数类型是不是写 cursor??
比如
function sel_xxx_by_id(v_cursor OUT  cursor)另外在调用的地方应该怎么写?

解决方案 »

  1.   

    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;
    /
    参照以上...
      

  2.   

    function sel_xxx_by_id(v_cursor OUT cursor),这是函数,不是过程。
    过程返回结果集,
    procedure proc_name
       (...
        po_result   sys_refcursor)
    is
    ...
    至于调用,不同的调用环境有不同的方法。
      

  3.   

    procedure proc_name
      (...
       po_result out sys_refcursor)
    is
    ...
      

  4.   

    说错了,我这个是在函数中需要返回一个游标,然后在调用的时候再循环
    如果是函数的话, 是不是返回值类型也可以 写成 v_cursor  OUT  sys_refcursor ?
      

  5.   

    函数是
    return sys_refcursor 
      

  6.   

    我现在的情况是,用的是公司自己的框架,返回值一律是number类型,表示成功,失败等
    不能返回其他类型,我在调用的地方,声明一个类型的变量,然后扔进去, 也就给他赋值了
    所以这个地方有点绕,向我这种情况,这个地方应该怎么写呢?