Oracle PLSQL 通过索引嵌套 table 迭代 - 索引可以乱序吗?
Oracle PLSQL nested table iteration via index - can indices be out of order?
我一直在不同的 oracle.com 网站上阅读
FOR i IN nested_table.FIRST .. nested_table.LAST
是您通常在 PLSQL 中执行的操作,当遍历嵌套 table 类型的所有元素时(只要没有元素被删除)。
我的嵌套 table 的实现方式是
type nested_table_type is table of varchar2(20)
并在不同的包中
nested_table other_package.nested_table_type := other_package.nested_table_type();
然后再循环
nested_table.extend;
nested_table(nested_table.last) := something;
任意次数。
然后,我想对每个值做一些事情,有点像在其他语言中使用 for each。我可以在这里使用for循环吗?有人告诉我要小心,因为在 Oracle 的情况下,索引可能不按顺序排列,因此 for 循环可能不会考虑某些索引。我肯定会用这个,他说:
index := nested_table.first;
while (index is not null)
loop
do things...
index := nested_table.next(index);
end loop;
这是真的吗?索引不按顺序或 for 循环如何不遍历它们?
感谢您的帮助:)
编辑:
这很可能是某种沟通不畅。我按原样保留了代码。尽管如此,还是感谢您阅读/回答,希望这对以后的人或事有所帮助:)
索引是有序的,只是您可以创建稀疏table,这意味着某些索引可能会丢失。
但是,对于您的情况,使用 i IN t.FIRST .. t.LAST
完全没问题。
我一直在不同的 oracle.com 网站上阅读
FOR i IN nested_table.FIRST .. nested_table.LAST
是您通常在 PLSQL 中执行的操作,当遍历嵌套 table 类型的所有元素时(只要没有元素被删除)。
我的嵌套 table 的实现方式是
type nested_table_type is table of varchar2(20)
并在不同的包中
nested_table other_package.nested_table_type := other_package.nested_table_type();
然后再循环
nested_table.extend;
nested_table(nested_table.last) := something;
任意次数。 然后,我想对每个值做一些事情,有点像在其他语言中使用 for each。我可以在这里使用for循环吗?有人告诉我要小心,因为在 Oracle 的情况下,索引可能不按顺序排列,因此 for 循环可能不会考虑某些索引。我肯定会用这个,他说:
index := nested_table.first;
while (index is not null)
loop
do things...
index := nested_table.next(index);
end loop;
这是真的吗?索引不按顺序或 for 循环如何不遍历它们?
感谢您的帮助:)
编辑:
这很可能是某种沟通不畅。我按原样保留了代码。尽管如此,还是感谢您阅读/回答,希望这对以后的人或事有所帮助:)
索引是有序的,只是您可以创建稀疏table,这意味着某些索引可能会丢失。
但是,对于您的情况,使用 i IN t.FIRST .. t.LAST
完全没问题。