Оператор цикла с предусловием
Назначение
Оператор цикла с предусловием предназначен для организации многократного выполнения фрагмента программы при выполнении некоторого условия, указанного перед его началом. Это условие проверяется до выполнения <тела цикла>, поэтому <тело цикла> может быть не выполнено ни разу (если условие с самого начала ложно).
Синтаксис
WHILE <выражение> LOOP <тело цикла> ENDLOOP
Описание
<выражение> должно быть логического типа. Если его значение TRUE, выполняется <тело цикла> до ENDLOOP, после чего снова вычисляется <выражение> и принимается решение о продолжении (прекращении) цикла. Если значение <выражения> FALSE, управление передается на следующий после ENDLOOP оператор. Чтобы количество циклов было конечным, в <теле цикла> обязательно должно выполняться изменение переменных или условий, влияющих на <выражение>.
Пример
Классический перебор записей в выборке.
create or replace table tab1 (i int, j int, s int);
insert into tab1 (i,j) values (1, 50);
insert into tab1 (i,j) values (2, 30);
insert into tab1 (i,j) values (3, 60);
insert into tab1 (i,j) values (4, 40);
create or replace procedure proc1 () result int for debug
declare
var sum int;//
var CURS cursor (i int, j int, s int);//
code
sum := 0;//
open curs as "curs" for "select * from tab1;";//
fetch curs first;//
while not outofcursor(curs) loop
sum := sum + curs.i + curs.j;//
execute "update tab1 set s = ? where current of \"curs\";", itoa(sum);//
fetch curs next;//
endloop
return sum;//
exceptions
when all then resignal;//
end;
--
call proc1();
Результат 190
--
select * from tab1;
I J S
1 50 51
2 30 83
3 60 146
4 40 190