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

如何提取&;在oracle plsql中打印函数外部的游标值,oracle,plsql,oracle-apex,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 dep

我是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;

函数返回一个ref游标。声明一个并将函数结果分配给它:

演示功能:

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;
测试:


您的示例中甚至没有调用get_empNumber。如何打印光标值。由于光标包含emp编号列表,下面的代码正确吗?mycursor:=f();DBMS_OUTPUT.PUT_行(mycursor);知道了。使用循环。MyRec类型为RECORD(col1-VARCHAR2(10),col2-VARCHAR2(20),…)--定义记录rec MyRec;将refCursor循环提取到rec中;未找到引用光标%1时退出;dbms|u输出.put|u行(rec.col1 | |','| | rec.col2 | |','| |……);端环;更新答案。
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;