Размер шрифта
-
+

Язык 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.

Страница 16