автономная конвейерная функция, вызывающая другую автономную конвейерную функцию - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу написать две конвейерные функции, автономные, то есть вне пакета PL / SQL:

create or replace function fn_test_1 
return sys.DBMS_DEBUG_VC2COLL pipelined -- ODCIVARCHAR2LIST 
AS
BEGIN
  FOR l_row in ( ... )
  LOOP
    PIPE ROW('text');
    PIPE ROW('other text');
    PIPE ROW(strings_concatenated);
  END LOOP;
END;
/

create or replace function fn_test_2 
return sys.DBMS_DEBUG_VC2COLL pipelined -- ODCIVARCHAR2LIST 
AS
BEGIN
  FOR l_row in ( select column_value as line from TABLE( fn_test_1 ) )
  LOOP
    PIPE ROW(l_row);
  END LOOP;
END;
/

fn_test_1 успешно компилируется и работает нормально. Однако я не могу скомпилировать fn_test_2 из-за:

PLS-00382: expression is of wrong type

Могу ли я даже написать отдельные конвейерные функции, вызывающие другую?

1 Ответ

1 голос
/ 05 апреля 2020

Вы возвращаете курсор, а не его значение, используйте это:

create or replace function fn_test_2 
return sys.DBMS_DEBUG_VC2COLL pipelined -- ODCIVARCHAR2LIST 
AS
BEGIN
  FOR l_row in ( select column_value as line from TABLE( fn_test_1 ) )
  LOOP
    PIPE ROW(l_row.line);
  END LOOP;
END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...