[英]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.