0

我想编写两个独立的流水线函数,这意味着在 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

我什至可以编写一个调用另一个的独立流水线函数吗?

4

1 回答 1

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;
/
于 2020-04-05T12:39:08.983 回答