автономная конвейерная функция, вызывающая другую автономную конвейерную функцию

Я хочу написать две конвейерные функции, автономные, то есть вне пакета 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

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


person Jakub P    schedule 05.04.2020    source источник


Ответы (1)


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

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;
/
person gsalem    schedule 05.04.2020
comment
Я только что заметил это и хотел опубликовать это, но ты был первым :) спасибо - person Jakub P; 05.04.2020