В Oracle PL/SQL изразът WHILE LOOP изпълнява кода, написан между WHILE LOOP и END LOOP, докато условието е вярно. По-долу давам няколко примера за оператора на Oracle WHILE LOOP.
Синтаксис
WHILE logical_condition LOOP -- some PL/SQL code END LOOP;
Примери на Oracle WHILE LOOP
1. Завъртете 10 пъти и отпечатайте таблицата
В следващия пример WHILE LOOP ще изпълнява операторите, докато стойността на n_num променлива е по-малка или равна на 10. Той ще отпечата таблицата с 2, като увеличава стойността на n_num променлива с 1 за всяка итерация на цикъла.
SET SERVEROUTPUT ON; DECLARE n_num NUMBER; n_table number := 2; BEGIN n_num := 1; WHILE n_num <= 10 LOOP DBMS_OUTPUT.put_line ('2 x ' || n_num || ' = '||(n_table * n_num)); n_num := n_num + 1; END LOOP; END; /
Изход:
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18 2 x 10 = 20 PL/SQL procedure successfully completed.
Не забравяйте да увеличите стойността на променливата n_num, така че да може да достигне до 10, в противен случай това ще бъде безкраен цикъл.
2. Цикъл, докато стойността на булевата променлива е TRUE
В следващия пример той ще се завърта, докато стойността на булева променлива b_run е TRUE и ще отпечата стойността на променливата n_num, като я увеличи с 1 за всяка итерация и когато стойността на n_num променлива е по-голяма от 5, тогава ще зададе променливата b_run на FALSE , така че WHILE LOOP може да завърши работата си.
SET SERVEROUTPUT ON; DECLARE n_num NUMBER; b_run BOOLEAN := TRUE; BEGIN n_num := 1; WHILE b_run LOOP DBMS_OUTPUT.put_line (n_num || ' Times'); n_num := n_num + 1; IF n_num > 5 THEN b_run := FALSE; END IF; END LOOP; END; /
Изход:
1 Times 2 Times 3 Times 4 Times 5 Times PL/SQL procedure successfully completed.
За това също не забравяйте да зададете стойност на променливата b_run на FALSE, в противен случай това ще бъде безкраен цикъл. Можете също да напишете изход; вместо b_run :=FALSE; операторза излизане от цикъла .
Вижте също:
- Пример на Oracle FOR LOOP REVERSE
- PL/SQL програма за отпечатване на данни за служителите