从Oracle中的函数返回游标

时间:2016-11-20 18:18:44

标签: oracle plsql

我想做的是从函数返回结果,因此可以按以下方式使用函数: 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

是否可以从函数返回游标/结果,这是以这种方式定义的?

3 个答案:

答案 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的嵌套表类型;