使用OPEN cursor FOR dynamic_query:
CREATE OR REPLACE FUNCTION my_fun(ord VARCHAR2)
RETURN sys_refcursor
IS
refcur SYS_REFCURSOR;
BEGIN
OPEN refcur FOR
'SELECT level as x, 100-level as y FROM dual
CONNECT BY LEVEL <= 10
ORDER BY ' || ord;
RETURN refcur;
END;
/
現在:
VAR x REFCURSOR;
exec :x := my_fun('x');
print :x;
X Y
---------- ----------
1 99
2 98
3 97
4 96
5 95
6 94
7 93
8 92
9 91
10 90
10 rows selected.
exec :x := my_fun('y');
print :x;
X Y
---------- ----------
10 90
9 91
8 92
7 93
6 94
5 95
4 96
3 97
2 98
1 99
10 rows selected.
exec :x := my_fun('z');
print :x;
ORA-00904: "Z": invalid identifier
ORA-06512: "TEST.MY_FUN", line 7
ORA-06512: line 1
00904. 00000 - "%s: invalid identifier"