sql >> Database >  >> RDS >> Oracle

Pijplijnfunctie die een andere pijplijnfunctie aanroept

Het punt van pijplijnfuncties is om TABLE()-functies te voeden. Ik denk niet dat er een manier is om het te vermijden. Helaas moeten we de uitvoer ervan toewijzen aan een PL/SQL-variabele. We kunnen geen pijplijnfunctie toewijzen aan een geneste tabel zoals deze nt := more_rows; vanwege

PLS-00653: aggregate/table functions are not allowed in PL/SQL scope

Dus SELECT ... FROM TABLE() het moet wel.

Ik heb een iets andere oplossing voor uw overweging. Ik weet niet of het je onderliggende probleem oplost.

create or replace package body tq84_pipelined as 

    function more_rows return tq84_line pipelined is 
    begin 

        pipe row('ist'); 
        pipe row('Eugen,'); 

        return; 

    end more_rows; 

    function go return tq84_line pipelined is 
        nt1 tq84_line;
        nt2 tq84_line;
        nt3 tq84_line;
        nt0 tq84_line;
    begin 

        nt1 := tq84_line('Mein','Name'); 

        select * 
        bulk collect into nt2
        from table(more_rows);

        nt3 := tq84_line('ich','weiss','von','nichts.'); 

        nt0 := nt1 multiset union nt2 multiset union nt3; 

        for i in nt0.first..nt0.last
        loop 
          pipe row(nt0(i)); 
        end loop; 

        return;

    end go; 

end tq84_pipelined; 
/

Zoals u ongetwijfeld weet (maar ten behoeve van andere zoekers), is de MULTISET UNION-syntaxis voor het samenvoegen van collecties geïntroduceerd in Oracle 10g.

Deze versie van GO() produceert dezelfde uitvoer als uw oorspronkelijke implementatie:

SQL> select * from table( tq84_pipelined.go)
  2  /

COLUMN_VALUE
-------------------------
Mein
Name
ist
Eugen,
ich
weiss
von
nichts.

8 rows selected.

SQL>


  1. MySQL CSV-import:datetime-waarde

  2. MySQL is een goede manier om een ​​rij in te voegen als deze niet wordt gevonden, of om deze bij te werken als deze wordt gevonden

  3. SQL:cumulatieve kolommen &som over de rij

  4. MYSQL-syntaxis evalueert niet niet gelijk aan in aanwezigheid van NULL