Oracle цикл for continue

Oracle цикл for continue thumbnail

На сегодня вы уже многое знаете о PL/SQL. Но очень многое еще впереди. Как и во всех языках программирования, в PL/SQL имеются операторы циклов. Их три основных типа:

  1. Безусловные циклы (выполняемые бесконечно)
  2. Интерактивные циклы (FOR)
  3. Условные циклы (WHILE)

Самый простой тип цикла в языке PL/SQL таков:

LOOP NULL; END LOOP /

Но использовать такой цикл нет смысла, да и для экземпляра БД это не безопасно. Для этого необходимо использовать определенные пути выхода из циклов. Их то же три:

  1. EXIT – Безусловный выход из цикла. Используется посредством применения оператора IF.
  2. EXIT WHEN – Выход при выполнении условия.
  3. GOTO – Выход из цикла во внешний контекст.

Давайте рассмотрим пример с применением цикла LOOP EXIT WHEN. Запишем следующее:

DECLARE i NUMBER := 0; BEGIN LOOP — start loop 1 i := i + 1; IF (i >= 100) THEN i := 0; EXIT; — exit when i >= 0 END IF; END LOOP; — end loop 1 LOOP — start loop 2 i := i + 1; EXIT WHEN (i >= 100); — exit when i >= 0 END LOOP; — end loop 2——– END; /

Получаем после исполнения:

SQL> DECLARE 2 i NUMBER := 0; 3 4 BEGIN 5 6 LOOP 7 i := i + 1; 8 IF (i >= 100) THEN 9 i := 0; 10 EXIT; 11 END IF; 12 END LOOP; 13 14 LOOP 15 i := i + 1; 16 EXIT WHEN (i >= 100); 17 END LOOP; 18 19 END; 20 / Процедура PL/SQL успешно завершена.

Видимых действий не было, но и ошибок то же! Первый цикл закончился после того как i стало равно 10. При этом оно получило значение 0 и произошел выход из цикла. Второй цикл применил вложенное предложение EXIT WHEN, что является более верным его использованием синтаксически. Тем не менее, применение условных операторов предполагает перед выходом из цикла проделать некоторые действия. Цикл LOOP EXIT WHEN END LOOP в последующем будет самым, часто используемым при построении конструкций курсоров. Рассмотрим еще одну разновидность вышеприведенного цикла:

DECLARE k NUMBER := 0; BEGIN WHILE (k < 10) LOOP k := k + 1; END LOOP; END; /

Получаем:

SQL> DECLARE 2 k NUMBER := 0; 3 4 BEGIN 5 6 WHILE (k < 10) LOOP 7 k := k + 1; 8 END LOOP; 9 10 END; 11 / Процедура PL/SQL успешно завершена.

Здесь в отличие от предыдущего цикла, действия выполняются до тех пор пока условие истинно. Если условие ложно, то цикл прекращается. Что хорошо видно из приведенного примера. В PL/SQL в конструкциях циклов нет такого, иногда полезного, оператора как CONTINUE, вследствие того, что выражение CONTINUE зарезервировано языком PL/SQL и используется для других целей. Но такую конструкцию как CONTINUE можно эмулировать, применив цикл вида LOOP EXIT WHEN END LOOP и используя весьма не популярный, но в данном случае очень полезный оператор GOTO!

Запишем следующее, выведем все нечетные числа до 20:

SET SERVEROUTPUT ON DECLARE s NUMBER := 0; BEGIN DBMS_OUTPUT.enable; LOOP IF(MOD(s, 2) = 1) THEN GOTO LESS; END IF; DBMS_OUTPUT.put_line(TO_CHAR(s)||’ is even!’); <<LESS>> EXIT WHEN (s = 20); s := s + 1; END LOOP; END; /

Получаем:

SQL> SET SERVEROUTPUT ON SQL> DECLARE 2 s NUMBER := 0; 3 4 BEGIN 5 6 DBMS_OUTPUT.enable; 7 8 LOOP 9 IF(MOD(s, 2) = 1) THEN 10 GOTO LESS; 11 END IF; 12 DBMS_OUTPUT.put_line(TO_CHAR(s)||’ is even!’); 13 <<LESS>> 14 EXIT WHEN (s = 20); 15 s := s + 1; 16 END LOOP; 17 18 END; 19 / 0 is even! 2 is even! 4 is even! 6 is even! 8 is even! 10 is even! 12 is even! 14 is even! 16 is even! 18 is even! 20 is even! 0 is even! 2 is even! 4 is even! 6 is even! 8 is even! 10 is even! 12 is even! 14 is even! 16 is even! 18 is even! 20 is even! Процедура PL/SQL успешно завершена.

В результате применения GOTO в теле цикла получаем не сложную и понятную логику работы. Теперь давайте рассмотрим, не менее полезный и очень популярный в PL/SQL цикл FOR. Он к стати очень удобен при работе с курсорами, но об этом чуть позднее. Запишем следующее:

BEGIN FOR i IN 1..100 LOOP NULL; END LOOP; END; / SQL> BEGIN 2 FOR i IN 1..100 LOOP 3 NULL; 4 END LOOP; 5 END; 6 / Процедура PL/SQL успешно завершена.

В данный момент FOR успешно ничего не делал аж сто раз! Итак, давайте рассмотрим его чуть ближе, IN как и в операторе SELECT задает диапазон значений итерации цикла, а “..” это как вы помните так называемый “оператор диапазона”! Вот так просто и ясно. Остальное уже знакомо. Замечу так же, что переменная цикла i является переменной только для чтения. По этому шаг цикла FOR изменить принудительно нельзя! Если это необходимо, то лучше применять цикл вида LOOP EXIT WHEN END LOOP! 🙂 Теперь давайте поработаем с числами:

DECLARE s NUMBER := 0; BEGIN DBMS_OUTPUT.enable; FOR i IN 1..20 LOOP IF(MOD(i, 2) = 1) THEN DBMS_OUTPUT.put_line(TO_CHAR(i)||’ is even!’); s := i; END IF; END LOOP; DBMS_OUTPUT.put_line(‘last odd number was ‘||TO_CHAR(s)); END; /

Получаем:

SQL> DECLARE 2 s NUMBER := 0; 3 4 BEGIN 5 DBMS_OUTPUT.enable; 6 FOR i IN 1..20 LOOP 7 IF(MOD(i, 2) = 1) THEN 8 DBMS_OUTPUT.put_line(TO_CHAR(i)||’ is even!’); 9 s := i; 10 END IF; 11 END LOOP; 12 DBMS_OUTPUT.put_line(‘last odd number was ‘||TO_CHAR(s)); 13 END; 14 / 1 is even! 3 is even! 5 is even! 7 is even! 9 is even! 11 is even! 13 is even! 15 is even! 17 is even! 19 is even! last odd number was 19 Процедура PL/SQL успешно завершена.

Читайте также:  Паскаль цикл чтобы числа не повторялись

Та же задачка, только с циклом FOR. Да, функция MOD возвращает остаток от деления чисел, как вы, наверное, уже догадались. Так же в операторе FOR есть возможность задавать обратный отсчет, ну, например, перед стартом или взрывом! 🙂 Вот так:

BEGIN DBMS_OUTPUT.enable; FOR i IN REVERSE 1..10 LOOP DBMS_OUTPUT.put_line(TO_CHAR(i)||’-‘); END LOOP; DBMS_OUTPUT.put_line(‘Blastoff!’); END; /

Получаем:

SQL> BEGIN 2 DBMS_OUTPUT.enable; 3 FOR i IN REVERSE 1..10 LOOP 4 DBMS_OUTPUT.put_line(TO_CHAR(i)||’-‘); 5 END LOOP; 6 DBMS_OUTPUT.put_line(‘Blastoff!’); 7 END; 8 / 10- 9- 8- 7- 6- 5- 4- 3- 2- 1- Blastoff! Процедура PL/SQL успешно завершена.

Нолика не было, но бабахнуло! Вот такой достаточно богатый набор операторов циклов в языке PL/SQL! Надеюсь, вы научитесь с легкостью их применять при построении серверных приложений ваших БД! 🙂

Источник

В этой статье в основном вводятся:

  • 4.1 Заявление о контроле филиала

    4.1.1 Оператор IF-THEN-ELSE

    4.1.2 Оператор IF-THEN-ELSIF

    4.1.3 Заявление CASE

    4.1.4 Оператор CASE

  • 4.2 Заявление об управлении циклом

    4.2.1 Петля LOOP

    4.2.2 Используйте EXIT для выхода из цикла

    4.2.3 Используйте EXIT-WHEN для выхода из цикла

    4.2.4 Используйте COUNTINUE для продолжения цикла

    4.2.5 Цикл WHILE-LOOP

    4.2.6 Цикл FOR-LOOP

    4.2.7 Рекомендации по использованию операторов цикла

  • 4.3 Заявление о последовательности

    4.3.1 Операторы и метки GOTO

    4.3.2 Использование оператора NULL

Заявление об управлении ветвьюДве категории:

  • Блок операторов IF: используйте блоки операторов, такие как IF-ELSE, для управления ветвлением.
  • Блок операторов CASE: используйте блок операторов CASE для управления ветвлением.

Три категории операторов управления циклом:

  • Простой цикл LOOP: это самый базовый тип цикла, включающий операторы LOOP-ENDLOOP и некоторые

    EXIT оператор выхода.

  • Цифровой цикл FOR: эта структура цикла позволяет указать количество циклов, которые будут выполняться, когда указанное количество раз будет выполнено.

    Выйти из цикла, когда

  • Цикл WHILE: цикл выполняется только тогда, когда конкретный цикл удовлетворяется, и цикл завершается, когда условие больше не выполняется.

Заявление EXITОн также делится на следующие два типа.

  • Оператор EXIT: прямой выход из цикла.
  • Оператор EXITWHEN: выйти из цикла, когда выполнены условия, указанные в WHEN.

IF блок

4.1.1 Оператор IF-THEN-ELSE

  • IF заявление: Содержит предложения IF-THEN и IF-THEN-ELSE, допускает только одну группу вариантов, то есть, если

    Если условие установлено, выполнить блок операторов I, или, если условие не установлено, выполнить блок операторов 2.

  • Заявление ЭЛСИФ: Если условие IF не выполняется, разрешается несколько наборов вариантов, например, если условие 1 не выполняется.

    Если он установлен, он оценивает условия в ELSIF и выполняет код. Затем есть несколько наборов вариантов, поэтому можно включить несколько ELSIF.

    Утверждение.

  • Вложенный оператор IF: Позволяет включать несколько групп выбора, очень похоже на ELSIF.

грамматика

IF condition THEN … СостояниеTrueПри выполнении операторов в порядке … ELSE … СостояниеFalse/NULLПорядок исполнения заявлений … END IF;

Пример кода

DECLARE v_count NUMBER (10) := 0; – Определить переменную счетчика v_empno NUMBER (4) := 7888; – Определить номер сотрудника BEGIN SELECT COUNT (1) – сначала запросить, существует ли указанный номер сотрудника INTO v_count FROM emp WHERE empno = v_empno; –использоватьIFПриговор, если номер сотрудника не существует, результат0 IF v_count = 0 THEN -Оператор INSERT выполняется для вставки новой записи о сотруднике INSERT INTO emp (empno, ename, job, hire, sal, deptno ) VALUES (v_empno, «Чжан Сань», ‘управляющий делами’, TRUNC (SYS), 1000, 20 ); END IF; – Отправить изменения в базу данных COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (SQLERRM); – вывод информации об исключении END; /

Описание кода

Oracle цикл for continue

Пример кода

DECLARE v_sal NUMBER (7, 2); – переменная зарплата v_deptno NUMBER (2); – переменная отдела v_job VARCHAR2 (9); –Позиционная переменная BEGIN –Запросить информацию об указанном номере сотрудника из базы данных SELECT deptno, v_job, sal INTO v_deptno, v_job, v_sal FROM emp WHERE empno = :empno; –Если номер отдела20Из сотрудников IF v_deptno = 20 THEN –Если позиция КЛЕРК IF v_job = ‘CLERK’ THEN –Повышение зарплаты0.12 v_sal := v_sal * (1 + 0.12); –Если должность АНАЛИТИК ELSIF v_job = ‘ANALYST’ THEN –Повышение зарплаты0.19 v_sal := v_sal * (1 + 0.19); END IF; – В противном случае не для20Сотрудникам не разрешат повышать зарплату ELSE DBMS_OUTPUT.put_line («Повышение заработной платы могут получить только сотрудники с отделом №20»); END IF; END;

Описание кода

Oracle цикл for continue

Oracle цикл for continue

Вложенный IF-код

DECLARE v_count NUMBER (10) := 0; – Определить переменную счетчика v_empno NUMBER (4) := 7888; – Определить номер сотрудника BEGIN SELECT COUNT (1) – сначала запросить, существует ли указанный номер сотрудника INTO v_count FROM emp WHERE empno = v_empno; –использоватьIFПриговор, если номер сотрудника не существует, результат0 IF v_count = 0 THEN -Оператор INSERT выполняется для вставки новой записи о сотруднике INSERT INTO emp (empno, ename, job, hire, sal, deptno ) VALUES (v_empno, «Чжан Сань», ‘управляющий делами’, TRUNC (SYS), 1000, 20 ); ELSE -В противном случае выполните инструкцию UP, чтобы обновить запись о сотруднике. UP emp SET ename = «Чжан Сань», job = ‘управляющий делами’, hire = TRUNC (SYS), sal = 1000, deptno = 20 WHERE empno = v_empno; END IF; – Отправить изменения в базу данных COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (SQLERRM); – вывод информации об исключении END;

4.1.2 Оператор IF-THEN-ELSEIF

грамматика

IF condition-1 THEN ements-1 ELSIF condition-N THEN ements-N (ELSE else_ements] END IF;

Часть кода

DECLARE v_character CHAR(1) := & tmpVar; – определить заменяющую переменную BEGIN IF v_character = ‘A’ -Определите, является ли персонаж’A’, Если нет, переходите к следующему ELSIF THEN DBMS_OUTPUT.put_line (‘Текущая строка вывода:’ || v_character); ELSIF v_character = ‘B’ -Определите, является ли персонаж’B’, Если нет, переходите к следующему ELSIF THEN DBMS_OUTPUT.put_line (‘Текущая строка вывода:’ || v_character); ELSIF v_character = ‘C’ -Определите, является ли персонаж’C’, Если нет, переходите к следующему ELSIF THEN DBMS_OUTPUT.put_line (‘Текущая строка вывода:’ || v_character); ELSIF v_character = ‘D’ -Определите, является ли персонаж’D’, Если нет, перейдите к инструкции ELSE THEN DBMS_OUTPUT.put_line (‘Текущая строка вывода:’ || v_character); ELSE DBMS_OUTPUT.put_line (‘Не персонаж между A-D’); END IF; END;

Описание кода

Oracle цикл for continue

4.1.3 Блок операторов CASE

Простой оператор CASE

определение:

Селектор простого оператора CASE – это переменная или функция, которая возвращает допустимый тип данных. Селектор не может быть логического типа.

грамматика:

CASE selector variable WHEN criterionl THEN criterionI ements ; WHEN criterion2 THEN criterion2 ements ; WHEN criterion ( n +1 ) THEN criterion (n+1) ements; ELSE block ements END CASE ;

Часть кода

DECLARE v_job VARCHAR2 (30); – определить сохранитьCASEСимвольная переменная селектора v_empno NUMBER (4): = & empno; – Определите номер сотрудника, используемый для запроса сотрудников BEGIN SELECT job – Получить значение селектора v_job INTO v_job FROM emp WHERE empno = v_empno; – Когда указаноCASEПосле селектора v_job тип всех предложений WHEN должен соответствовать типу VARCHAR2. CASE v_job WHEN ‘CLERK’ THEN UP emp SET sal = sal * (1 + 0.15) WHERE empno = v_empno; DBMS_OUTPUT.put_line («Повышение зарплаты рядовых сотрудников на 15%»); WHEN ‘ANALYST’ THEN UP emp SET sal = sal * (1 + 0.18) WHERE empno = v_empno; DBMS_OUTPUT.put_line («Повышение зарплаты аналитиков на 18%»); WHEN ‘MANAGER’ THEN UP emp SET sal = sal * (1 + 0.20) WHERE empno = v_empno; DBMS_OUTPUT.put_line («Повышение зарплаты менеджеров на 20%»); WHEN ‘SALESMAN’ THEN UP emp SET sal = sal * (1 + 0.22) WHERE empno = v_empno; DBMS_OUTPUT.put_line («Повышение на 22% для торгового персонала»); ELSE –использоватьELSEИнформация об отображении выписки DBMS_OUTPUT.put_line («Ранг сотрудника не в рейтинге повышения зарплаты! ‘); END CASE; – ПрекращениеCASEБлок выписок END;

Описание кода

Oracle цикл for continue

4.1.4 Оператор CASE

определение

Селектор оператора CASE – это переменная логического типа или функция, возвращающая логический тип. Селектор по умолчанию – True. При поиске выражения True определение селектора может быть опущено.

грамматика

CASE [{True False}] WHEN [criterion1 | expression1] THEN criterion1_ements; WHEN [criterion1 | expression1] THEN criterion2_ements; WHEN [criterion (n+1)|expression (n+1)] THEN criterion(n+1)_ements; ELSE block_ements; END CASE;

Часть кода

DECLARE v_sal NUMBER (10, 2); – Определим переменные для сохранения зарплаты v_empno NUMBER (10): = & empno; – Номер сотрудника, используемый для запроса BEGIN SELECT sal – Получить информацию о зарплате сотрудников INTO v_sal FROM emp WHERE empno = v_empno; –Используйте поискCASEСправка для определения уровня заработной платы сотрудников CASE WHEN v_sal BETWEEN 1000 AND 1500 THEN DBMS_OUTPUT.put_line («Уровень персонала: младший персонал»); WHEN v_sal BETWEEN 1500 AND 3000 THEN DBMS_OUTPUT.put_line («Уровень персонала: средний менеджмент»); WHEN v_sal BETWEEN 3000 AND 5000 THEN DBMS_OUTPUT.put_line («Уровень персонала: старший менеджер»); ELSE DBMS_OUTPUT.put_line («Не в пределах диапазона уровней»); END CASE; END;

Описание кода

Oracle цикл for continue

грамматика

LOOP excutable ement(s) END LOOP;

образец графика

Oracle цикл for continue

4.2.2 Используйте EXIT для выхода из цикла

грамматика

LOOP ement 1; ement 2; IF condition THEN EXIT; END IF; END LOOP; ement 3

Пример кода

DECLARE v_count NUMBER (2) := 0; – Определите переменную количества циклов BEGIN LOOP – запустить цикл выполнения v_count := v_count + 1; – Счетчик петель вверх1 – Печать информации о символах DBMS_OUTPUT.put_line (‘Строка’ || v_count || ‘:Hello PL/SQL!’); –Если условие счета10, Затем выйдите из цикла IF v_count = 10 THEN EXIT; –Используйте EXIT для выхода из цикла END IF; END LOOP; -После выхода из цикла этот оператор будет выполнен DBMS_OUTPUT.put_line (‘Цикл завершился! ‘); END;

4.2.3 Используйте EXIT-WHEN для выхода из цикла

грамматика

LOOP ement 1; ement 2; EXIT WHEN condition ; END IF; END LOOP; ement 3

Пример кода

DECLARE v_count NUMBER (2) := 0; – Определите переменную количества циклов BEGIN LOOP – запустить цикл выполнения v_count := v_count + 1; – Счетчик петель вверх1 – Печать информации о символах DBMS_OUTPUT.put_line (‘Строка’ || v_count || ‘:Hello PL/SQL!’); –Если условие счета10, Затем выйдите из цикла EXIT WHEN v_count=10; END LOOP; -После выхода из цикла этот оператор будет выполнен DBMS_OUTPUT.put_line (‘Цикл завершился! ‘); END;

4.2.4 Используйте CONTIUNE, чтобы продолжить цикл

определение

  • Прервать работу токовой петли
  • Не выйдет сразу из цикла
  • Переход к началу оператора цикла, чтобы начать следующий цикл
  • Используйте то же, что и EXIT, есть также операторы CONTIUNE-WHEN

Пример кода

DECLARE x NUMBER := 0; BEGIN LOOP – запускать цикл при обнаруженииCONTINUEЗаявление, перезапустит выполнение LOOP DBMS_OUTPUT.put_line (‘Значение внутреннего цикла: x =’ || TO_CHAR (x)); x := x + 1; IF x < 3 ТО – Если счетчик меньше3, Затем перезапустите цикл выполнения. CONTINUE; – ИспользоватьCONTINUEПропустить последующее выполнение кода и перезапустить цикл END IF; –Когда количество циклов больше, чем3Код выполняется, когда DBMS_OUTPUT.put_line (‘Значение после CONTINUE: x =’ || TO_CHAR (x)); EXIT WHEN x = 5; –Когда количество циклов равно5Когда выйти из цикла END LOOP; -Вывести конечное значение цикла DBMS_OUTPUT.put_line (‘Значение после конца тела цикла: x =’ || TO_CHAR (x)); END;

COUNTINUE WHEN перезапускает код цикла

DECLARE x NUMBER := 0; BEGIN LOOP – запустить цикл, когда он встречает оператор CONTINUE, он перезапускает выполнение LOOP DBMS_OUTPUT.put_line (‘Значение внутреннего цикла: x =’ || TO_CHAR (x)); x := x + 1; CONTINUE WHEN x<3; –Когда количество циклов больше, чем3Код выполняется, когда DBMS_OUTPUT.put_line (‘Значение после CONTINUE: x =’ || TO_CHAR (x)); EXIT WHEN x = 5; –Когда количество циклов равно5Когда выйти из цикла END LOOP; -Вывести конечное значение цикла DBMS_OUTPUT.put_line (‘Значение после конца тела цикла: x =’ || TO_CHAR (x)); END;

Oracle цикл for continue

грамматика

WHILE entry_condition LOOP [counter_mangement_ements;] repeating_ements; END LOOP;

Пример кода

DECLARE counter NUMBER := 1; – Определить переменную счетчика BEGIN WHILE (counter < 10) – Условием оценки цикла является counter <10 LOOP DBMS_OUTPUT.put_line (“Счетчик [” || counter || ‘].’); IF counter >= 1 –Если счетчик цикла больше или равен1 THEN counter := counter + 1; – Увеличить счетчик цикла1 END IF; END LOOP; END;

Две категории

  • Цифровой цикл FOR: работа цикла в пределах постоянного числа циклов
  • Курсор FOR loop: используется для цикла набора результатов курсора

Инструкции:

  • Базовая структура цикла
  • Используйте ключевое слово REVERSE
  • Используйте верхние и нижние граничные значения

грамматика

FOR loop index IN [REVERSE] lowest number .. highest number LOOP executable ement(s) END LOOP;

1. Пример кода базовой структуры цикла

DECLARE v_total INTEGER := 0; – Круговой накопительный итоговый номер BEGIN FOR i IN 1 .. 3 –Используйте цикл FOR, чтобы начать счетчик циклов LOOP v_total := v_total + 1; –Сводное накопление DBMS_OUTPUT.put_line (‘Значение счетчика циклов:’ || i); END LOOP; – Значение результата цикла вывода DBMS_OUTPUT.put_line (‘Полный цикл:’ || v_total); END;

2. Примеры использования кодов ключевых слов REVERSE

DECLARE v_total INTEGER := 0; – Круговой накопительный итоговый номер BEGIN FOR i IN REVERSE 1 .. 3 –Используйте REVERSE для переключения от высокого к низкому LOOP v_total := v_total + 1; –Сводное накопление DBMS_OUTPUT.put_line (‘Значение счетчика циклов:’ || i); END LOOP; – Значение результата цикла вывода DBMS_OUTPUT.put_line (‘Всего цикла:’ || v_total); END;

3. Примеры использования кодов верхнего и нижнего граничных значений.

DECLARE v_counter INTEGER := & counter; – динамически указать верхнее граничное значение переменной BEGIN FOR i IN 1 .. v_counter – использовать переменные для определения границ в цикле LOOP DBMS_OUTPUT.put_line (“Количество петель:” || i); END LOOP; END;

4.2.7 Предложения по использованию операторов цикла

оператор циклаРекомендуемое время использования
Простой циклЕсли вам нужно убедиться, что тело цикла выполняется хотя бы один раз, вы можете использовать цикл LOOP-END LOOP. Вы должны использовать оператор EXIT WHEN или EXIT для завершения цикла в теле цикла, чтобы избежать бесконечного цикла.
WHILE-LOOP циклКогда вам нужно определить условие цикла до его запуска, вы можете использовать цикл WHILE-LOOP. Этот тип цикла может сделать невозможным выполнение тела цикла сразу. Значение условия оценки цикла WHILE необходимо изменить в теле цикла, чтобы предотвратить попадание в бесконечный цикл.
Цикл FORЕсли вы знаете количество циклов перед запуском цикла, вы можете выбрать цикл FOR. Старайтесь избегать предложений EXIT или EXIT WHEN в цикле FOR. Если появляется такой оператор, то цикл FOR может не применяться к текущему циклу.

Круговое предложение

  • Не используйте EXIT или EXIT WHEN в циклах FOR и WHILE. Предложение, если хочешь

    Зациклить все значения в определенном диапазоне, вы всегда должны использовать цикл FOR, а оператор EXIT в цикле FOR будет

    Прервать выполнение цикла.

  • Вы можете использовать операторы меток в цикле, чтобы упростить понимание программы и в то же время повысить ее гибкость.
  • Будьте осторожны, чтобы не создать бесконечный цикл. При написании кода цикла всегда убедитесь, что цикл имеет условие для выхода.
  • Старайтесь избегать использования операторов RETURN или GOTO внутри цикла.

характерная черта

  • Вы можете перейти от текущего блока к закрытому.
  • Вы можете перейти с текущего блока на верхний.
  • Вы можете перейти от оператора исключения к другому блоку.
  • Вы можете перейти от блока PL / SQL к последовательному оператору.

ограничение

  • Вы не можете перейти от внешнего блока к вложенному субблоку.
  • Прыжок из внешней позиции в петлю невозможен.
  • Вы не можете перейти к оператору IF.
  • Вы не можете перейти к оператору CASE.
  • Вы не можете переходить от одной части оператора IF к другой.
  • Вы не можете перейти от обработчика исключений к текущему блоку кода PL / SQL.

4.3.2 Использование оператора NULL

определение

Ничего не делать для улучшения читабельности программы

Пример кода

DECLARE v_result INT := 0; – Переменная для сохранения значения результата BEGIN v_result := 16 / 0; – сознательно0Делить DBMS_OUTPUT.put_line ( ‘Теперь время:’ || TO_CHAR (SYS, ‘yyyy-MM-dd HH24:MI:SS’) ); EXCEPTION – Блок операторов обработки исключений WHEN OTHERS THEN NULL; – При возникновении какого-либо исключения ничего не делать. END;

Источник