Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Fungsi pipa memanggil fungsi pipa lainnya

Inti dari fungsi pipelined adalah untuk memberi makan fungsi TABLE(). Saya tidak berpikir ada cara untuk menghindarinya. Sayangnya kita harus menetapkan outputnya ke variabel PL/SQL. Kami tidak dapat menetapkan fungsi pipelined ke tabel bersarang seperti ini nt := more_rows; karena

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

Jadi SELECT ... FROM TABLE() itu harus.

Saya punya solusi yang sedikit berbeda untuk pertimbangan Anda. Saya tidak tahu apakah itu menyelesaikan masalah mendasar Anda.

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; 
/

Seperti yang saya yakin Anda ketahui (tetapi untuk kepentingan pencari lain) sintaks MULTISET UNION untuk glomming koleksi bersama diperkenalkan di Oracle 10g.

Versi GO() ini menghasilkan keluaran yang sama dengan implementasi asli Anda:

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

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

8 rows selected.

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengganti nama kolom tabel di Oracle 10g

  2. SQL - Menggabungkan tidak lengkap

  3. ORA-01830:gambar format tanggal berakhir sebelum mengonversi seluruh string input

  4. OracleCommand dengan OracleDependency menunggu selamanya

  5. Bukan bulan yang valid saat menjalankan prosedur parameter IN dengan nilai tanggal