Ошибка вывода результата PL/SQL блока через DBMS_SQL.return_result
При выполнении в Oracle APEX команды:
DECLARE
first_cursor SYS_REFCURSOR;
BEGIN
OPEN first_cursor FOR SELECT * FROM employees;
DBMS_SQL.return_result(first_cursor);
END;
строка DBMS_SQL.return_result(first_cursor);
выдает ошибку:
Error processing condition. Error computing plan for statement.
ORA-00905: missing keyword
В чем может быть проблема?
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Проблема в том, что непонятно, где запускается блок. Следует учесть, что возвращаемый результат обрабатывается в клиенте. Tо есть, клиент должен неявно вызывать GET_NEXT_RESULT, обрабатывать результат и обеспечивать его вывод.
Блок из вопроса без каких либо изменений прекрасно работает, например, в SQL*Plus:
SQL> DECLARE
2 first_cursor SYS_REFCURSOR;
3 BEGIN
4 OPEN first_cursor FOR SELECT * FROM employees;
5 DBMS_SQL.return_result(first_cursor);
6 END;
7 /
PL/SQL procedure successfully completed.
ResultSet #1
ID DEPT SALARY BEGIN_DAT END_DATE MAN_ID
---------- ---------- ---------- --------- --------- ----------
1 22 3500.86 01-JUL-19 01-MAY-20 1
1 24 2000.86 01-JUN-19 01-MAY-20 2
2 23 3500.86 01-JUN-19 01-MAY-20 2
3 24 3500.86 01-JUN-19 01-MAY-20 3
4 22 2000.86 01-JUN-19 01-MAY-20 3
7 21 3500.86 01-MAY-19 01-MAY-20 1
6 rows selected.
Что эквивалентно явному возврату открытого курсора:
set autoprint on
var rc refcursor
DECLARE
first_cursor SYS_REFCURSOR;
BEGIN
OPEN first_cursor FOR SELECT * FROM employees;
:rc := first_cursor;
END;
/