web-dev-qa-db-ja.com

CURSORを返す関数からのSELECT

SYS_REFCURSOR Type値を返す関数から選択したいと思います。

例えば ​​:

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;
4
Amine

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 | LAST_NAME 
:------ :-------- 
ドナルド|ダック
ミッキー|マウス

dbfiddle ---(ここ

PS。 xmlオーバーヘッドについて注意してください。

3
user2968720

これは私のために働きました:

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