Оператор цикла с предусловием
Назначение
Оператор цикла с предусловием предназначен для организации многократного выполнения фрагмента программы при выполнении некоторого условия, указанного перед его началом. Это условие проверяется до выполнения < тела цикла >, поэтому < тело цикла > может быть не выполнено ни разу (если условие с самого начала ложно).
Синтаксис
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