我已經得到了我一個BULK COLLECT填充像這樣的查詢PL/SQL VARRAY:我可以切片PL/SQL集合嗎?
SELECT id
BULK COLLECT INTO myarray
FROM aTable
現在,我想這個集合的切片傳遞到另外一個集合,這樣的事情:
newarray := myarray(2..5)
這應該將元素2,3,4和5從myarray傳遞給newarray。
我可以編寫一個循環並複製這些元素,但有沒有更簡潔的方法來做到這一點?
我已經得到了我一個BULK COLLECT填充像這樣的查詢PL/SQL VARRAY:我可以切片PL/SQL集合嗎?
SELECT id
BULK COLLECT INTO myarray
FROM aTable
現在,我想這個集合的切片傳遞到另外一個集合,這樣的事情:
newarray := myarray(2..5)
這應該將元素2,3,4和5從myarray傳遞給newarray。
我可以編寫一個循環並複製這些元素,但有沒有更簡潔的方法來做到這一點?
通常,你不想這樣做。你在內存中有大量的集合,現在你想製作它的副本。即使使用更多內存。通常在這種情況下,你傳遞整個集合(通過引用,而不是值),並提供一個啓動和停止索引。將它留給其他函數只處理指定的範圍。
那麼,對於我的具體用例,我並不真正看到問題,因爲我將主要處理相當小的集合(<10條目 - 我省略了查詢中的where標準)。 做副本的小內存/運行時間開銷看起來小於它將引入的代碼複雜度。 – Thorsten 2009-10-29 18:08:48
+1,PL/SQL不是C - 沒有指針。 – DCookie 2009-10-29 18:10:25
完全不是指針,但可以在參數的'NOCOPY'提示上。請參閱http://www.dba-oracle.com/t_plsql_passing_data_structures_nocopy.htm – 2009-10-29 19:02:30
好主意,但我沒有發現任何短於循環。 – Christian13467 2009-10-29 13:53:43
你爲什麼要這樣做,而不是另一個更具選擇性的選擇? – David 2009-11-05 13:27:19
因爲我想確定一個特定條件的最大「切片」。該檢查位於代碼的更復雜部分,我用更小或更小的切片進行調用。 – Thorsten 2009-11-05 15:29:29