Use*_*r27 2 oracle plsql data-collection
在 Oracle 中使用First..Last
和1..count
在 Oracle 中的区别是什么?
FOR i IN l_collection.FIRST..l_collection.LAST LOOP
Run Code Online (Sandbox Code Playgroud)
或者
FOR i IN 1..l_collection.COUNT LOOP
Run Code Online (Sandbox Code Playgroud)
first
并last
返回第一个索引和最后一个索引。count
返回集合中元素的数量。这些不一定提供引用集合中元素的正确方法,因为您可以拥有稀疏集合,其中索引值不连续(请参见下面的示例)。
declare
type t_numbers is table of number index by pls_integer;
l_numbers t_numbers;
begin
l_numbers(1) := 5;
l_numbers(4) := 6;
for i in l_numbers.first..l_numbers.last loop
dbms_output.put_line(i);
end loop;
end;
/
1
2
3
4
declare
type t_numbers is table of number index by pls_integer;
l_numbers t_numbers;
begin
l_numbers(1) := 5;
l_numbers(4) := 6;
for i in 1..l_numbers.count loop
dbms_output.put_line(i);
end loop;
end;
/
1
2
Run Code Online (Sandbox Code Playgroud)
我希望你明白为什么两个版本都失败了。只有当您有密集的集合(索引值是连续的)时,这些才能正常工作。对于稀疏集合,两种方法都会失败,您应该使用WHILE
循环:
declare
type t_numbers is table of number index by pls_integer;
l_index number;
l_numbers t_numbers;
begin
l_numbers(1) := 5;
l_numbers(4) := 6;
l_index := l_numbers.first;
while (l_index is not null)
loop
dbms_output.put_line(l_index);
l_index := l_numbers.next(l_index);
end loop;
end;
/
1
4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5745 次 |
最近记录: |