Оператор цикла с предусловием

Назначение

Оператор цикла с предусловием предназначен для организации многократного выполнения фрагмента программы при выполнении некоторого условия, указанного перед его началом. Это условие проверяется до выполнения <​тела цикла​>, поэтому <​тело цикла​> может быть не выполнено ни разу (если условие с самого начала ложно).

Синтаксис
       
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