PLS-00231: функция не может использоваться в SQL

Вопрос:

Я хочу проверить свою конвейерную функцию без создания пакета. Следующий пример упрощен:

DECLARE
FUNCTION testDC RETURN NCOL PIPELINED IS
BEGIN
PIPE ROW(5);
END;
BEGIN
FOR cur IN (select * from table (testDC())) LOOP
dbms_output.put_line('--> ');
END LOOP;
END;

Но я получаю эту ошибку:

ORA-06550: строка 7, столбец 7: PLS-00231: функция TESTDC не может использоваться в SQL
ORA-06550: строка 7, столбец 7: PL/SQL: ORA-00904:: неверный идентификатор
ORA-06550: строка 7, столбец 7: PL/SQL: выражение SQL игнорируется

Что лучше проверить эти функции?

Лучший ответ:

Создайте свою конвейерную функцию как отдельную процедуру или член пакета. Затем вы можете вызвать его из своего script.

Также убедитесь, что параметр NCOL, на который вы ссылаетесь, объявлен в схеме, к которой может обращаться вызывающий script.

Ответ №1

Вы не можете получить доступ к функции таблицы непосредственно в PL/SQL – см. тестовый пример ниже. Так как другие указали, вы должны определить функцию таблицы как автономную или упакованную.

 DECLARE
res NUMBER;
FUNCTION testDC RETURN NCOL PIPELINED IS
BEGIN
PIPE ROW(5);
END;

BEGIN
res := testDC();
dbms_output.put_line('--> '||res);

END;
/


ORA-06550: line 3, column 12:
PLS-00653: aggregate/table functions are not allowed in PL/SQL scope

Оцените статью
TechArks.Ru
Добавить комментарий