Oracle

從返回 CURSOR 的函式中選擇

  • February 5, 2018

我想從返回 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;

我想做類似的事情:

select * from  my_function('id015');

甚至 :

select alias.last_name from  my_function('id015') alias;

您可以嘗試使用 select * from table(xmlsequence( myfunc() )). 在這種情況下,您會在列中獲得 xml。

或者試試這個例子從你的 refcursor 中提取欄位

select extractvalue(column_value,'/ROW/FIRST_NAME') first_name
     , extractvalue(column_value,'/ROW/LAST_NAME') last_name
from table(xmlsequence(f()));
FIRST_NAME | 姓
:--------- | :--------
唐納德 | 鴨子 
米奇 | 老鼠 

dbfiddle在這裡

PS。關於 xml 成本的注意事項。

這對我有用:

variable x refcursor 
set autoprint on 
exec :x := my_function('id015')

引用自:https://dba.stackexchange.com/questions/91845