Язык PL/SQL - стр. 16
SQL> DECLARE
2 arg NUMBER; – Переменная для вычисления факториала
3 i NUMBER; – Переменная-счетчик
4 limit NUMBER := 1000000000; – Граница
5 text1 VARCHAR2(80) := 'n! числа, впервые превышающий 1000000000';
6
7 BEGIN
8 i := 0;
9 arg := 1;
10 LOOP
11 EXIT WHEN arg > limit;
12 arg := arg*(i+1);
13 i := i + 1;
14 END LOOP;
15 DBMS_OUTPUT.PUT_LINE(text1);
16 DBMS_OUTPUT.PUT_LINE(TO_CHAR(arg));
17 DBMS_OUTPUT.PUT_LINE('Искомое число = '||TO_CHAR(i));
18 END;
/
n! числа, впервые превышающий 1000000000
6227020800
Искомое число = 13
PL/SQL procedure successfully completed.
Из любого цикла в PL/SQL можно выйти командой EXIT с указанием логического условия выхода. В основном команда EXIT используется в простых циклах, потому что в циклах FOR и WHILE и так явно указываются условия окончания цикла, а иметь в коде больше одного условия окончания для цикла является плохим стилем программирования.
Если происходит зацикливание (выполнение бесконечного цикла без выхода из него), то программа PL/SQL «уходит в себя» («повисает»). Для прекращения выполнения такой программы в SQL*Plus следует нажать на клавиатуре комбинацию клавиш Ctrl+C:
SQL> BEGIN LOOP NULL; END LOOP; END;
2 /
^C
Цикл WHILE
Цикл WHILE с предусловием позволяет выполнить одну и ту же последовательность команд PL/SQL пока истинно проверяемое предусловие.
С помощью цикла WHILE найдем число, факториал которого является наименьшим числом, впервые превышающим 1 000 000 000 000:
SQL> DECLARE
2 arg NUMBER; – Переменная для вычисления факториала
3 i NUMBER; – Переменная-счетчик
4 limit NUMBER := 1000000000000;– Граница
5 text1 VARCHAR2(80):='n! числа, впервые превышающий 1000000000000;
6
7 BEGIN
8 i := 0;
9 arg := i;
10 WHILE arg < 1000000000000 LOOP
11 arg := arg*(i+1);
12 i := i + 1;
13 END LOOP;
14 DBMS_OUTPUT.PUT_LINE(text1);
15 DBMS_OUTPUT.PUT_LINE(TO_CHAR(arg));
16 DBMS_OUTPUT.PUT_LINE('Искомое число = '||TO_CHAR(i));
17 END;
/
n! числа,впервые превышающий 1000000000000
1307674368000
Искомое число = 15
PL/SQL procedure successfully completed.
Отметим, что если условие цикла WHILE изначально ложно (FALSE), то цикл не выполнится ни разу.
Цикл FOR
Цикл FOR («цикл со счетчиком»), используется в том случае, когда известно, сколько раз нужно выполнить итерацию цикла. Приведем пример вычисления факториала заданного числа.
SQL> DECLARE
2 arg NUMBER := 1;
3 n NUMBER := 20;
4 text1 VARCHAR2(30) := 'Факториал числа '||n||' = ';
5 BEGIN
6 FOR i IN 1..n LOOP
7 arg := arg*i;
8 END LOOP;
9 DBMS_OUTPUT.PUT_LINE(text1||TO_CHAR(arg));
10 END;
/
Факториал числа 20 = 2432902008176640000
PL/SQL procedure successfully completed.