我想做的是从函数返回结果,因此可以按以下方式使用函数:
select * from stuff(1)
简化的功能示例:
FUNCTION stuff(p_var number) RETURN SYS_REFCURSOR
IS
CURSOR cur(cp_var number) IS
SELECT * FROM dual ;
BEGIN
OPEN cur(p_var);
RETURN cur;
END stuff;
但是这不会编译:
Error: PLS-00382: expression is of wrong type
是否可以从函数返回游标/结果,这是以这种方式定义的?
答案 0 :(得分:1)
你需要创建管道表功能,这里有一篇文章可以帮助你。
https://oracle-base.com/articles/misc/pipelined-table-functions
答案 1 :(得分:1)
您的函数返回sys_refcursor
,在您的代码中,您将返回simple cursor
。这使代码错误。如果您想从函数返回ref_cursor
,可以按如下方式使用:
create or replace function stuff (p_var number)
return sys_refcursor
is
rf_cur sys_refcursor;
begin
open rf_cur for
select *
from employee
where employee_id = p_var;
return rf_cur;
end stuff;
执行:
select stuff(1) from dual;
答案 2 :(得分:0)
我认为你不能直接在FROM子句中调用ref游标,但是你可以尝试跟随..
SELECT * FROM TABLE(function_name());
函数应该是返回类型为PLSQL嵌套表 创建CURSOR%ROWTYPE的嵌套表类型;