Краткий ответ: вам не нужно объявлять переменную, чтобы использовать ее в цикле FOR
.Если вы попытаетесь, это на самом деле не та же самая переменная, даже если она имеет то же имя.
Из документации для FOR Loop index :
Индекс оператора FOR LOOP
неявно объявляется как переменная типа PLS_INTEGER
, которая является локальной для цикла.Операторы в цикле могут прочитать значение индекса, но не могут его изменить.Заявления вне цикла не могут ссылаться на индекс.После выполнения оператора FOR LOOP
индекс не определен.
Два 'i'
в вашем примере - это разные переменные.Вы можете обратиться к первому уровню, добавив к нему префикс имени процедуры.
Вне цикла по умолчанию i
относится к переменной уровня процедуры.В цикле i
относится к индексу цикла.
create or replace procedure test123 as
i number := 0;
begin
for i in 1..5 loop
test123.i := test123.i + 10;
dbms_output.put_line('Loop index i = ' || i);
dbms_output.put_line('Procedure-level variable i = ' || test123.i);
end loop;
dbms_output.put_line('After loop: i = ' || i);
end;
Вывод:
Loop index i = 1
Procedure-level variable i = 10
Loop index i = 2
Procedure-level variable i = 20
Loop index i = 3
Procedure-level variable i = 30
Loop index i = 4
Procedure-level variable i = 40
Loop index i = 5
Procedure-level variable i = 50
After loop: i = 50