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