Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm Pipelined gọi một hàm pipelined khác

Điểm của các hàm pipelined là cung cấp các hàm TABLE (). Tôi không nghĩ rằng có bất kỳ cách nào để tránh nó. Thật không may, chúng tôi phải gán đầu ra của nó cho một biến PL / SQL. Chúng tôi không thể gán một hàm pipelined cho một bảng lồng nhau như thế này nt := more_rows; do

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

Vì vậy, SELECT ... FROM TABLE() nó phải như vậy.

Tôi có một giải pháp hơi khác để bạn xem xét. Tôi không biết liệu nó có giải quyết được vấn đề cơ bản của bạn hay không.

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

Tôi chắc rằng bạn đã biết (nhưng vì lợi ích của những người tìm kiếm khác), cú pháp MULTISET UNION để ghép các bộ sưu tập với nhau đã được giới thiệu trong Oracle 10g.

Phiên bản GO () này tạo ra kết quả giống như cách triển khai ban đầu của bạn:

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. Làm thế nào để sử dụng sql * plus trong tập lệnh lệnh Windows để điều khiển luồng?

  2. SSIS chuyển đổi Varchar2 thành DT_STR

  3. dữ liệu listagg sang định dạng có thể sử dụng được?

  4. Truy vấn SQL Oracle:Truy xuất các giá trị mới nhất cho mỗi nhóm dựa trên thời gian

  5. Thực thi truy vấn Sql động trong Oracle