for循环有2个迭代器变量

时间:2016-01-01 18:31:36

标签: oracle plsql

我需要使用2个变量迭代 FOR 循环。我搜索了类似的东西:

DECLARE
counter INT;
max INT;

...

FOR counter IN REVERSE 1..10, max IN 1..5 LOOP
    -- some code
END LOOP;

但找不到任何参考。有这样的事吗?

编辑:

我正在尝试颠倒数组元素的顺序:

DECLARE
TYPE IntArray IS VARRAY(80) OF INT; -- array of 80 ints
myArray IntArray;
counter INT; -- counter variable 1
max_limit INT; -- counter variable 2
tmp INT; 

BEGIN
myArray := IntArray();
max_limit := 20;
myArray.EXTEND(max_limit);

-- I want to do something like this:
FOR counter IN 1..10, max_limit IN REVERSE 10..20 LOOP
    -- reverse elements
END LOOP;

END;

2 个答案:

答案 0 :(得分:2)

从for循环的语法,我不确定你是否可以在单循环中有两个索引。

enter image description here

答案 1 :(得分:1)

你想要一个循环,其中一个变量减少而另一个变量(循环计数器)增加,每个循环的速率相同(基于你的注释)。你不需要将这两个变量作为循环本身的一部分(并且无论如何都不能这样做,as the for loop syntax shows),但是因为它们相关,你可以只计算另一个:

FOR counter IN 1..10 LOOP
    tmp := max_value - counter;
    -- reverse elements
END LOOP;

或直接递减:

FOR counter IN 1..10 LOOP
    max_value := max_counter - 1;
    -- reverse elements
END LOOP;

您还没有显示要反转的数组,并且不确定为什么您的两个变量似乎被10偏移 - 可能是您计划将现有的变量追加到它的末尾,而不是比取代它?在任何一种情况下,你都不需要第二个变量。