WHILE в Oracle PL/SQL — как выполнять циклы с условием

🟢 WHILE в Oracle SQL. Введение

WHILE — это управляющая конструкция в PL/SQL, позволяющая выполнять цикл до тех пор, пока условие истинно. Она особенно полезна, когда количество повторений заранее неизвестно и зависит от логики, счётчиков или состояния данных.

Цикл WHILE — мощный инструмент для написания процедур, функций, обработки курсоров, пакетной обработки данных и другой логики с повторяющимися действиями.


🔤 Написание

plsql
WHILE условие LOOP
-- инструкции
END LOOP;

🔄 Где используется

  • Обработка данных до достижения определённого состояния

  • Чтение и обработка курсора

  • Условные циклы в процедурах и функциях

  • Повторение запросов при ошибках

  • Симуляция REPEAT-UNTIL в логике бизнес-правил


🧪 10 Примеров использования WHILE

1️⃣ Простой цикл с условием

plsql
DECLARE
i NUMBER := 1;
BEGIN
WHILE i <= 5 LOOP
DBMS_OUTPUT.PUT_LINE('Итерация: ' || i);
i := i + 1;
END LOOP;
END;

2️⃣ Вычисление факториала числа

plsql
DECLARE
n NUMBER := 5;
result NUMBER := 1;
BEGIN
WHILE n > 0 LOOP
result := result * n;
n := n - 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Факториал: ' || result);
END;

3️⃣ Чтение данных курсора в WHILE-цикле

plsql
DECLARE
CURSOR c IS SELECT name FROM employees;
v_name employees.name%TYPE;
BEGIN
OPEN c;
FETCH c INTO v_name;
WHILE c%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(v_name);
FETCH c INTO v_name;
END LOOP;
CLOSE c;
END;

4️⃣ Обработка данных по условию

plsql
DECLARE
amount NUMBER := 1000;
BEGIN
WHILE amount > 0 LOOP
DBMS_OUTPUT.PUT_LINE('Осталось: ' || amount);
amount := amount - 250;
END LOOP;
END;

5️⃣ Использование EXIT внутри цикла

plsql
DECLARE
i NUMBER := 1;
BEGIN
WHILE TRUE LOOP
EXIT WHEN i > 3;
DBMS_OUTPUT.PUT_LINE('i = ' || i);
i := i + 1;
END LOOP;
END;

6️⃣ WHILE с вложенным IF

plsql
DECLARE
i NUMBER := 1;
BEGIN
WHILE i <= 10 LOOP
IF MOD(i, 2) = 0 THEN
DBMS_OUTPUT.PUT_LINE(i || ' — чётное');
END IF;
i := i + 1;
END LOOP;
END;

7️⃣ Инкремент с шагом 0.5

plsql
DECLARE
x NUMBER := 0;
BEGIN
WHILE x <= 2 LOOP
DBMS_OUTPUT.PUT_LINE('x = ' || x);
x := x + 0.5;
END LOOP;
END;

8️⃣ Обработка строк по символам

plsql
DECLARE
str VARCHAR2(100) := 'PLSQL';
i NUMBER := 1;
BEGIN
WHILE i <= LENGTH(str) LOOP
DBMS_OUTPUT.PUT_LINE(SUBSTR(str, i, 1));
i := i + 1;
END LOOP;
END;

9️⃣ WHILE с вызовом подпрограммы

plsql
DECLARE
n NUMBER := 3;
PROCEDURE say_hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Привет!’);
END;
BEGIN
WHILE n > 0 LOOP
say_hello;
n := n — 1;
END LOOP;
END;

🔟 Прерывание по системной дате

plsql
DECLARE
start_time TIMESTAMP := SYSTIMESTAMP;
BEGIN
WHILE SYSTIMESTAMP < start_time + INTERVAL '5' SECOND LOOP
DBMS_LOCK.SLEEP(1);
DBMS_OUTPUT.PUT_LINE('Ждём...');
END LOOP;
END;

🧩 WHILE в Oracle SQL. Заключение

WHILE — это удобный способ реализовать циклы с гибкими условиями в Oracle PL/SQL. Он особенно полезен, когда итерации зависят от состояния переменных, входных данных или бизнес-логики.

💡 Запомни:

  • Условие проверяется ДО выполнения тела цикла

  • Используй EXIT для управления выходом

  • Комбинируется с курсорами, процедурами и IF

  • Прекрасен для обработки до нужного состояния


🔜 Следующая статья:

WHENEVER в Oracle SQL*Plus — как управлять поведением скриптов при ошибках


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии