2009-10-29 94 views
6

我已经得到了我一个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。

我可以编写一个循环并复制这些元素,但有没有更简洁的方法来做到这一点?

+0

好主意,但我没有发现任何短于循环。 – Christian13467 2009-10-29 13:53:43

+0

你为什么要这样做,而不是另一个更具选择性的选择? – David 2009-11-05 13:27:19

+0

因为我想确定一个特定条件的最大“切片”。该检查位于代码的更复杂部分,我用更小或更小的切片进行调用。 – Thorsten 2009-11-05 15:29:29

回答

3

通常,你不想这样做。你在内存中有大量的集合,现在你想制作它的副本。即使使用更多内存。通常在这种情况下,你传递整个集合(通过引用,而不是值),并提供一个启动和停止索引。将它留给其他函数只处理指定的范围。

+0

那么,对于我的具体用例,我并不真正看到问题,因为我将主要处理相当小的集合(<10条目 - 我省略了查询中的where标准)。 做副本的小内存/运行时间开销看起来小于它将引入的代码复杂度。 – Thorsten 2009-10-29 18:08:48

+0

+1,PL/SQL不是C - 没有指针。 – DCookie 2009-10-29 18:10:25

+1

完全不是指针,但可以在参数的'NOCOPY'提示上。请参阅http://www.dba-oracle.com/t_plsql_passing_data_structures_nocopy.htm – 2009-10-29 19:02:30

相关问题