如何提取&在oracle plsql中打印函数外部的游标值

时间:2017-05-17 18:03:04

标签: oracle plsql oracle-apex

我是pl / sql的新手。我的怀疑可能是基本的,但我无法弄清楚答案。任何帮助都非常感谢。这就是问题所在。

我创建了一个返回光标的函数。

CREATE OR REPLACE FUNCTION get_empNumber (dept_name varchar2)
    RETURN SYS_REFCURSOR
IS
    l_rc SYS_REFCURSOR;
BEGIN 
    OPEN l_rc FOR
        select DISTINCT emp_NUMBER FROM emp where department_NAME = dept_name;

    RETURN l_rc;
END ;

如果我想通过调用函数来访问上面返回的游标,我应该怎么做?尝试下面的代码,但是给出了错误。因为我在Oracle Apex中尝试这个,它只是说编译错误,不提供任何进一步的错误细节。

DECLARE
    cnumber number;
    CURSOR c1 IS get_bugNumber ('John');
BEGIN
    OPEN c1; 

    LOOP
        FETCH c1 INTO cnumber ;
        EXIT WHEN c1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Emp_No= ' || cnumber );
    END LOOP;

    CLOSE c1;
END;

1 个答案:

答案 0 :(得分:0)

您的函数返回引用游标。声明一个并将函数的结果赋给它:

演示功能:

create or replace function f
    return sys_refcursor
as
    c sys_refcursor;
begin
    open c for select 'Hello, world' as text from dual;
    return c;
end f;

测试:

declare
    mycursor sys_refcursor;

    type myrectype is record
        ( text varchar2(100) );
    r myrectype;
begin
    mycursor := f();

    loop
        fetch mycursor into r;
        exit when mycursor%notfound;

        dbms_output.put_line(r.text);
    end loop;

    close mycursor;
end;