从返回 CURSOR 的函数中选择

Ami*_*ine 5 oracle plsql cursors select

我想从返回 SYS_REFCURSOR 类型值的函数中进行选择。

例如 :

CREATE OR REPLACE FUNCTION my_funtion (
        my_param IN VARCHAR2)
     RETURN SYS_REFCURSOR
  IS
     l_return   SYS_REFCURSOR;
  BEGIN
           OPEN l_return FOR
                SELECT last_name, first_name
                  FROM employees
                  WHERE id = my_param
              ORDER BY employee_id;
     RETURN l_return;
END my_funtion;
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情:

select * from  my_function('id015');
Run Code Online (Sandbox Code Playgroud)

甚至 :

select alias.last_name from  my_function('id015') alias;
Run Code Online (Sandbox Code Playgroud)

小智 5

你可以尝试使用 select * from table(xmlsequence( myfunc() )). 在这种情况下,您将在列中获得 xml。

或者尝试此示例从您的引用游标中提取字段

select extractvalue(column_value,'/ROW/FIRST_NAME') first_name
     , extractvalue(column_value,'/ROW/LAST_NAME') last_name
from table(xmlsequence(f()));
Run Code Online (Sandbox Code Playgroud)
FIRST_NAME | 姓
:--------- | :--------
唐纳德 | 鸭子     
米奇 | 老鼠    

dbfiddle在这里

附言。请注意 xml 开销。