簡體   English   中英

流水線函數的結果,總是會歸類為“書面”,還是不?

[英]Result from pipelined function, always will sorted as “written”, or not?

需要獲取重新編號的結果集,例如:

  CREATE OR REPLACE TYPE nums_list IS TABLE OF NUMBER;

  CREATE OR REPLACE FUNCTION generate_series(from_n INTEGER, to_n INTEGER, cycle_max INTEGER)
  RETURN nums_list PIPELINED AS  
      cycle_iteration INTEGER := from_n;
  BEGIN
      FOR i IN from_n..to_n LOOP
          PIPE ROW( cycle_iteration );
          cycle_iteration := cycle_iteration + 1;
          IF cycle_iteration > cycle_max THEN
             cycle_iteration := from_n;
          END IF;
        END LOOP;
        RETURN; 
  END;

  SELECT * FROM TABLE(generate_series(1,10,3));

問題是:有保證,oracle總是會按該順序返回結果嗎?

1 2 3 1 2 3 1 2 3 1

或有時結果會意外地排序,如下所示:

1 1 1 1 2 2 ....

管道消除了通過在創建函數時將行從函數中移出來構建大型集合的需要 ,從而節省了內存並允許在生成所有行之前開始后續處理

流水線表功能

這意味着,它將在完全獲取之前開始處理行,這就是為什么看到不可預測的順序的原因。

暫無
暫無

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

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