Язык PL/SQL. Иван Сергеевич Задворьев
Чтение книги онлайн.

Читать онлайн книгу Язык PL/SQL - Иван Сергеевич Задворьев страница 11

СКАЧАТЬ style="font-size:15px;">      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.

      Обратите внимание, что счетчик – управляющую переменную цикла (в данном случае i) объявлять в разделе объявлений не нужно, она объявляется автоматически с областью видимости между ключевыми словами LOOP и END LOOP.

      При рассмотрении циклов FOR обычно возникают два вопроса:

      есть ли возможность сделать так, чтобы значения счетчика цикла не возрастали, а уменьшались?

      есть ли возможность нетривиальных, то есть не на единицу, приращений шага счетчика цикла?

      Цикл с ключевым словом REVERSE

      Цикл со счетчиком, кратным 10

      SQL> BEGIN

      2 FOR i IN REVERSE 1..5 LOOP

      3 СКАЧАТЬ