我想编写PL / SQL来测试包中的函数。该包定义了游标类型
TYPE ref_cursor IS REF CURSOR;
我想根据该类型定义记录。
我的代码是:
DECLARE
cur PACKAGE_NAME.ref_cursor;
rec cur%ROWTYPE;
为什么最后一行不正确?
答案 0 :(得分:12)
您无法根据弱类型的REF CURSOR定义记录类型。由于包中定义的游标类型可用于从具有任意列的任意查询返回数据,因此PL / SQL编译器无法确定用于获取数据的适当记录类型。
如果您知道从函数返回的实际数据,则可以声明该类型的记录以获取数据。例如,如果我声明一个返回弱类型游标类型的函数但我知道游标确实返回基于EMP
表的游标,我可以将数据提取到EMP%ROWTYPE
记录中(请注意SYS_REFCURSOR
是系统定义的弱类型REF CURSOR类型)
create or replace function f1
return sys_refcursor
is
l_rc sys_refcursor;
begin
open l_rc
for select *
from emp;
return l_rc;
end;
declare
l_rc sys_refcursor;
l_emp emp%rowtype;
begin
l_rc := f1;
loop
fetch l_rc into l_emp;
exit when l_rc%notfound;
dbms_output.put_line( l_emp.empno );
end loop;
end;