簡體   English   中英

pl/sql 中的嵌套 PIPELINED 函數

[英]Nested PIPELINED function in pl/sql

我必須在 pl/sql 中編寫一個嵌套的流水線函數,我嘗試以以下方式實現它。

create package body XYZ AS
    function main_xyz return data_type_1 pipelined is
        begin 
        --code
        pipe row(sub_func);
        end;
    function sub_func return data_type_1 pipelined is
        begin 
        --code
        pipe row(sub_func_1);
        end;
     function sub_func_1 return data_type_1 pipelined is
        begin 
        --code
        pipe row(main_abc);
        end;
 end;

create package body abc AS
        function main_abc return data_type_2 pipelined is
            var data_type_2;
            begin 
            --code
             return var;
            end;
  end;

但是,我收到以下錯誤

[錯誤] PLS-00653:PLS-00653:PL/SQL 范圍內不允許使用聚合/表函數

我哪里錯了? 是語法還是邏輯?

流水線函數一一提供行(按需),因此您不能一次從流水線函數中放置所有行。

在我看來,您需要以這種方式更改main_xyz

function main_xyz return data_type_1 pipelined is
 begin 

   --code

   FOR rec IN (select * from table(XYZ.sub_func)) LOOP
       pipe row(rec);
   END LOOP;
 end;

考慮到sub_func必須在 XYZ 包的規范中,因為您在 SQL 查詢中使用的所有內容包括 PIPELINED 函數都是公開的(即對運行查詢的用戶可見)。

更新:我忘記提醒:不要濫用流水線函數(如果您有其他選擇) - 使用它們的查詢可能性能不佳,因為數據庫引擎無法為“不可預測的管道行”構建良好的執行計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM