Не присваивайте значение переменной, контролирующей цикл, дважды (перед циклом и внутри него). В большинстве случаев достаточно сделать это только один раз - внутри тела цикла.
Вы, наверно, спросите - почему? Ведь это дублирование можно найти почти в любой книге по программированию! Мой "неофициальный" ответ прост: зачем писать дважды то, что для достижения той-же цели может быть написано один раз? Ну, а "официальный" ответ вам и так известен: избегайте любое дублирование кода.
*** Не рекомендуется: ***
PB:
Код: Выделить всё
long ll_row = 0
ll_row = dw_cust.GetNextModified(ll_row, Primary!)
do while ll_row > 0
[do something with the modified row]
ll_row = dw_cust.GetNextModified(ll_row, Primary!)
loop
PL/SQL:
Код: Выделить всё
FETCH emp_cursor INTO v_row;
WHILE emp_cursor%FOUND LOOP
[do something]
FETCH emp_cursor INTO v_row; -- deja vu! :-)
END LOOP;
Бесконечный цикл (while (1=1), for(;;), do while true и т.п.) с break (или exit when, специфичным для PL/SQL) - самое элегантное решение в этой ситуации::
*** Рекомендуется: ***
PB:
Код: Выделить всё
long ll_row = 0
do while true
ll_row = dw_cust.GetNextModified(ll_row, Primary!)
if ll_row < 1 then exit
[do something with the modified row]
loop
PL/SQL:
Код: Выделить всё
LOOP
FETCH emp_cursor INTO v_row;
EXIT WHEN emp_cursor%NOTFOUND; -- or "IF emp_cursor%NOTFOUND THEN BREAK;"
[do something]
END LOOP;