powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-06561: given statement is not supported by package DBMS_SQL
8 сообщений из 8, страница 1 из 1
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665457
ArchiSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть PTF, возвращающая произвольную структуру данных.
Функцию взял отсюда: http://www.oracle-developer.net/display.php?id=422.
Если в качестве параметра передаю обычную строку, все работает:
Код: plsql
1.
2.
3.
4.
SELECT *
  FROM   TABLE(
              dla_pkg.query_view(   'select 123 from dual'
                  ) )



Если передаю функцию, то выдает ошибку:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace package test25062018 
is
str varchar2(32676) := 'select 123 from dual';
function varchar2_for_ptf return varchar2;
end;
/ 

create or replace package body test25062018
is
 function varchar2_for_ptf return varchar2
 is
 begin
   return str;
 end;
end;
/

SELECT *
  FROM   TABLE(
              dla_pkg.query_view(   test25062018.varchar2_for_ptf 
                  ) )



Ругается в строке
Код: plsql
1.
DBMS_SQL.PARSE( r_sql.cursor, stmt, DBMS_SQL.NATIVE );



Подскажите, пожалуйста, в чем ошибка.
Спасибо.
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665462
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArchiSQLв чем ошибка.Структура результирующего набора должна быть определена на этапе parsing-а. Литерал этому удовлетворяет, переменные - нет.
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665468
ArchiSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicArchiSQLв чем ошибка.Структура результирующего набора должна быть определена на этапе parsing-а. Литерал этому удовлетворяет, переменные - нет.

Спасибо за ответ. Можно как-то сделать так, чтобы иметь возможность "создавать" селект средствами PL\SQL, но при передаче в параметры функции, парсинг проходил?
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665486
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не будет работать. ODCI table interface работает следующим образом: ODCITableDescribe где и определяются поля вызывается только при hard parse. Посему если ты выдашь:

Код: plsql
1.
2.
3.
4.
SELECT *
  FROM   TABLE(
              dla_pkg.query_view(   test25062018.varchar2_for_ptf 
                  ) )



во второй раз, то Oracle найдет SQL в shared pool и parse soft а следовательно и ODCITableDescribe вызван не будет и выполнение пойдет с тем-же числом и типами полей как было в первый раз. Но главное не это. ODCITableDescribe, как уже было сказано, выполняется на фазе парсинга когда все что доступно это литералы. Все что не литерал передается ODCITableDescribe как NULL. Так что 'select 123 from dual' будет передано ODCITableDescribe a test25062018.varchar2_for_ptf нет и ODCITableDescribe вместо него получит NULL и не сможет определить поля результата и загнется.

SY.
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665489
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArchiSQLиметь возможность "создавать" селект средствами PL\SQL
Гораздо проще формировать не select неизвестной структуры с выдачей resultset в статический код, а шаблонный pl/sql блок, содержащий как сам select, так и его обработку, который и скармливать execute immediate.
Если результат обработки надо выдать в сторону клиента, то ref cursor справится.
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665543
ArchiSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Спасибо за пояснения.

andrey_anonymousArchiSQLиметь возможность "создавать" селект средствами PL\SQL
Гораздо проще формировать не select неизвестной структуры с выдачей resultset в статический код, а шаблонный pl/sql блок, содержащий как сам select, так и его обработку, который и скармливать execute immediate.
Если результат обработки надо выдать в сторону клиента, то ref cursor справится.

Я Вас правильно понимаю:
1. Командами PL\SQL формируем селект нужной структуры в виде переменной varchar2.
2. С помощью execute immediate формирую слаботипизированный курсор и передаю его на сторону клиента?
Пока не совсем понятно как из такого курсора вытаскивать данные...

Вообще задача такая - есть некая гуишка, где пользователь вводит параметры. В зависимости от этих параметров меняется набор столбцов селекта. Хочется, чтобы код гуи был неизменным. То есть я думал сделать следующее - из внешней среды вызывается процедура, где формируется нужный селект в переменной varchar2, которая потом передается в PTF, которая уже вызывается из кода гуи (этот селект остается неизменным). Но вот не получилось :)
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665547
ArchiSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArchiSQLПока не совсем понятно как из такого курсора вытаскивать данные...


здесь уточню, вытаскивать данные при заранее неизвестной структуре.
...
Рейтинг: 0 / 0
ORA-06561: given statement is not supported by package DBMS_SQL
    #39665552
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArchiSQLArchiSQLПока не совсем понятно как из такого курсора вытаскивать данные...


здесь уточню, вытаскивать данные при заранее неизвестной структуре. это должно быть заботой гуя
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-06561: given statement is not supported by package DBMS_SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]