FOR в Oracle PL/SQL — цикл FOR с 100 практическими примерами

🟢 FOR в PL/SQL. Введение

Если WHILE это про контроль, то FOR это про чистоту кода. Это самый читаемый цикл Oracle. Когда знаешь сколько итераций нужно — лучше инструмента не найти.

FOR особенно хорош потому что:

  • не требует ручного счётчика
  • исключает ошибки инкремента
  • читабельнее WHILE
  • идеален для курсоров
  • упрощает batch обработку

Синтаксис FOR

FOR i IN 1..10 LOOP
 statements;
END LOOP;

Базовый пример

BEGIN
 FOR i IN 1..5 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;

100 примеров использования FOR

1. Простой числовой цикл

BEGIN
 FOR i IN 1..10 LOOP
  NULL;
 END LOOP;
END;

2. Вывод чисел

BEGIN
 FOR i IN 1..5 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;

3. Квадраты чисел

BEGIN
 FOR i IN 1..6 LOOP
  DBMS_OUTPUT.PUT_LINE(i*i);
 END LOOP;
END;

4. Кубы

BEGIN
 FOR i IN 1..5 LOOP
  DBMS_OUTPUT.PUT_LINE(i*i*i);
 END LOOP;
END;

5. Сумма диапазона

DECLARE
 s NUMBER:=0;
BEGIN
 FOR i IN 1..10 LOOP
  s:=s+i;
 END LOOP;
END;

6. Чётные числа

BEGIN
 FOR i IN 1..10 LOOP
  IF MOD(i,2)=0 THEN
   DBMS_OUTPUT.PUT_LINE(i);
  END IF;
 END LOOP;
END;

7. Нечётные числа

BEGIN
 FOR i IN 1..10 LOOP
  IF MOD(i,2)=1 THEN
   DBMS_OUTPUT.PUT_LINE(i);
  END IF;
 END LOOP;
END;

8. Умножение значений

DECLARE
 v NUMBER:=1;
BEGIN
 FOR i IN 1..5 LOOP
  v:=v*2;
 END LOOP;
END;

9. Генерация строк

BEGIN
 FOR i IN 1..3 LOOP
  DBMS_OUTPUT.PUT_LINE('row');
 END LOOP;
END;

10. Итерация диапазона

BEGIN
 FOR i IN 5..15 LOOP
  NULL;
 END LOOP;
END;

11. Уменьшение через REVERSE

BEGIN
 FOR i IN REVERSE 1..10 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;

12. Обратный диапазон

BEGIN
 FOR i IN REVERSE 5..9 LOOP
  NULL;
 END LOOP;
END;

13. Генерация ID

BEGIN
 FOR i IN 100..105 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;

14. Проверка условий

BEGIN
 FOR i IN 1..10 LOOP
  IF i=5 THEN
   NULL;
  END IF;
 END LOOP;
END;

15. EXIT внутри FOR

BEGIN
 FOR i IN 1..20 LOOP
  EXIT WHEN i=8;
 END LOOP;
END;

16. CONTINUE логика

BEGIN
 FOR i IN 1..10 LOOP
  CONTINUE WHEN i<5;
 END LOOP;
END;

17. Счётчик попыток

BEGIN
 FOR i IN 1..3 LOOP
  DBMS_OUTPUT.PUT_LINE('try');
 END LOOP;
END;

18. Генерация дат

BEGIN
 FOR i IN 1..5 LOOP
  DBMS_OUTPUT.PUT_LINE(SYSDATE+i);
 END LOOP;
END;

19. Подсчёт дней

BEGIN
 FOR i IN 1..30 LOOP
  NULL;
 END LOOP;
END;

20. Ограничение операций

BEGIN
 FOR i IN 1..7 LOOP
  NULL;
 END LOOP;
END;

Еще 20 примеров

21. Cursor FOR loop

BEGIN
 FOR r IN (SELECT LEVEL n FROM dual CONNECT BY LEVEL<5)
 LOOP
  DBMS_OUTPUT.PUT_LINE(r.n);
 END LOOP;
END;

22. Обход SELECT

BEGIN
 FOR r IN (SELECT 1 n FROM dual)
 LOOP
  NULL;
 END LOOP;
END;

23. Cursor сумма

DECLARE
 s NUMBER:=0;
BEGIN
 FOR r IN (SELECT LEVEL n FROM dual CONNECT BY LEVEL<6)
 LOOP
  s:=s+r.n;
 END LOOP;
END;

24. Обработка строк

BEGIN
 FOR r IN (SELECT 'A' v FROM dual)
 LOOP
  DBMS_OUTPUT.PUT_LINE(r.v);
 END LOOP;
END;

25. Генерация записей

BEGIN
 FOR r IN (SELECT LEVEL n FROM dual CONNECT BY LEVEL<4)
 LOOP
  NULL;
 END LOOP;
END;

26. Nested FOR

BEGIN
 FOR i IN 1..3 LOOP
  FOR j IN 1..2 LOOP
   NULL;
  END LOOP;
 END LOOP;
END;

27. Таблица умножения

BEGIN
 FOR i IN 1..3 LOOP
  FOR j IN 1..3 LOOP
   DBMS_OUTPUT.PUT_LINE(i*j);
  END LOOP;
 END LOOP;
END;

28. Генерация сетки

BEGIN
 FOR i IN 1..2 LOOP
  FOR j IN 1..2 LOOP
   NULL;
  END LOOP;
 END LOOP;
END;

29. Cursor reverse обработка

BEGIN
 FOR i IN REVERSE 1..5 LOOP
  NULL;
 END LOOP;
END;

30. Итерация диапазона

BEGIN
 FOR i IN 10..15 LOOP
  NULL;
 END LOOP;
END;

Еще 20 примеров

31. Увеличение значения в цикле

DECLARE
 v NUMBER:=0;
BEGIN
 FOR i IN 1..10 LOOP
  v:=v+i;
 END LOOP;
END;

32. Подсчёт итераций

DECLARE
 c NUMBER:=0;
BEGIN
 FOR i IN 1..15 LOOP
  c:=c+1;
 END LOOP;
END;

33. Генерация процентов

DECLARE
 p NUMBER:=0;
BEGIN
 FOR i IN 1..10 LOOP
  p:=p+10;
 END LOOP;
END;

34. Проверка значений

BEGIN
 FOR i IN 1..8 LOOP
  IF i>4 THEN
   NULL;
  END IF;
 END LOOP;
END;

35. Генерация диапазона

BEGIN
 FOR i IN 50..60 LOOP
  NULL;
 END LOOP;
END;

36. Рост коэффициента

DECLARE
 k NUMBER:=1;
BEGIN
 FOR i IN 1..5 LOOP
  k:=k*2;
 END LOOP;
END;

37. Снижение значения

DECLARE
 v NUMBER:=100;
BEGIN
 FOR i IN 1..5 LOOP
  v:=v-10;
 END LOOP;
END;

38. Генерация логов

BEGIN
 FOR i IN 1..4 LOOP
  DBMS_OUTPUT.PUT_LINE('log');
 END LOOP;
END;

39. Ограничение операций

BEGIN
 FOR i IN 1..6 LOOP
  NULL;
 END LOOP;
END;

40. Итерация значений

BEGIN
 FOR i IN 3..9 LOOP
  NULL;
 END LOOP;
END;

Еще 20 примеров

41. Обход коллекции

DECLARE
 TYPE t IS TABLE OF NUMBER;
 a t:=t(10,20,30);
BEGIN
 FOR i IN 1..a.COUNT LOOP
  DBMS_OUTPUT.PUT_LINE(a(i));
 END LOOP;
END;

42. Обработка массива строк

DECLARE
 TYPE t IS TABLE OF VARCHAR2(5);
 a t:=t('A','B');
BEGIN
 FOR i IN 1..a.COUNT LOOP
  NULL;
 END LOOP;
END;

43. Nested loops

BEGIN
 FOR i IN 1..2 LOOP
  FOR j IN 1..3 LOOP
   NULL;
  END LOOP;
 END LOOP;
END;

44. Двойная итерация

BEGIN
 FOR i IN 1..4 LOOP
  FOR j IN 1..2 LOOP
   DBMS_OUTPUT.PUT_LINE(i+j);
  END LOOP;
 END LOOP;
END;

45. Таблица умножения

BEGIN
 FOR i IN 1..3 LOOP
  FOR j IN 1..3 LOOP
   NULL;
  END LOOP;
 END LOOP;
END;

46. Cursor FOR с фильтром

BEGIN
 FOR r IN (SELECT LEVEL n FROM dual CONNECT BY LEVEL<10)
 LOOP
  IF r.n>5 THEN
   NULL;
  END IF;
 END LOOP;
END;

47. Подсчёт строк cursor

DECLARE
 c NUMBER:=0;
BEGIN
 FOR r IN (SELECT LEVEL FROM dual CONNECT BY LEVEL<7)
 LOOP
  c:=c+1;
 END LOOP;
END;

48. Генерация ID cursor

BEGIN
 FOR r IN (SELECT LEVEL+100 id FROM dual CONNECT BY LEVEL<5)
 LOOP
  NULL;
 END LOOP;
END;

49. Cursor обработка дат

BEGIN
 FOR r IN (SELECT SYSDATE+LEVEL d FROM dual CONNECT BY LEVEL<4)
 LOOP
  NULL;
 END LOOP;
END;

50. Cursor проверка

BEGIN
 FOR r IN (SELECT 1 n FROM dual)
 LOOP
  NULL;
 END LOOP;
END;

Еще 20 примеров

51. Reverse итерация

BEGIN
 FOR i IN REVERSE 1..6 LOOP
  NULL;
 END LOOP;
END;

52. Reverse вывод

BEGIN
 FOR i IN REVERSE 1..5 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;

53. Reverse диапазон

BEGIN
 FOR i IN REVERSE 10..15 LOOP
  NULL;
 END LOOP;
END;

54. Проверка reverse условия

BEGIN
 FOR i IN REVERSE 1..10 LOOP
  IF i<5 THEN
   NULL;
  END IF;
 END LOOP;
END;

55. Reverse nested

BEGIN
 FOR i IN REVERSE 1..3 LOOP
  FOR j IN 1..2 LOOP
   NULL;
  END LOOP;
 END LOOP;
END;

56. Генерация batch

BEGIN
 FOR i IN 1..12 LOOP
  NULL;
 END LOOP;
END;

57. Проверка этапов

BEGIN
 FOR i IN 1..5 LOOP
  NULL;
 END LOOP;
END;

58. Генерация сегментов

BEGIN
 FOR i IN 1..8 LOOP
  NULL;
 END LOOP;
END;

59. Подсчёт задач

BEGIN
 FOR i IN 1..9 LOOP
  NULL;
 END LOOP;
END;

60. Контроль операций

BEGIN
 FOR i IN 1..11 LOOP
  NULL;
 END LOOP;
END;

Еще 20 примеров

61. Генерация шагов

BEGIN
 FOR i IN 5..25 LOOP
  NULL;
 END LOOP;
END;

62. Проверка лимита

BEGIN
 FOR i IN 1..20 LOOP
  EXIT WHEN i=10;
 END LOOP;
END;

63. CONTINUE использование

BEGIN
 FOR i IN 1..10 LOOP
  CONTINUE WHEN i<6;
 END LOOP;
END;

64. Cursor EXIT

BEGIN
 FOR r IN (SELECT LEVEL n FROM dual CONNECT BY LEVEL<10)
 LOOP
  EXIT WHEN r.n=4;
 END LOOP;
END;

65. Генерация строк

BEGIN
 FOR i IN 1..3 LOOP
  DBMS_OUTPUT.PUT_LINE('data');
 END LOOP;
END;

66. Подсчёт файлов

BEGIN
 FOR i IN 1..14 LOOP
  NULL;
 END LOOP;
END;

67. Проверка очереди

BEGIN
 FOR i IN 1..6 LOOP
  NULL;
 END LOOP;
END;

68. Генерация процессов

BEGIN
 FOR i IN 1..7 LOOP
  NULL;
 END LOOP;
END;

69. Контроль статусов

BEGIN
 FOR i IN 1..5 LOOP
  NULL;
 END LOOP;
END;

70. Генерация операций

BEGIN
 FOR i IN 1..13 LOOP
  NULL;
 END LOOP;
END;

Еще 20 примеров

71. Подсчёт проверок

BEGIN
 FOR i IN 1..16 LOOP
  NULL;
 END LOOP;
END;

72. Генерация блоков

BEGIN
 FOR i IN 1..18 LOOP
  NULL;
 END LOOP;
END;

73. Проверка данных

BEGIN
 FOR i IN 1..22 LOOP
  NULL;
 END LOOP;
END;

74. Увеличение значения

DECLARE
 v NUMBER:=0;
BEGIN
 FOR i IN 1..10 LOOP
  v:=v+2;
 END LOOP;
END;

75. Умножение результата

DECLARE
 v NUMBER:=1;
BEGIN
 FOR i IN 1..4 LOOP
  v:=v*3;
 END LOOP;
END;

76. Проверка условий

BEGIN
 FOR i IN 1..12 LOOP
  IF i=9 THEN
   NULL;
  END IF;
 END LOOP;
END;

77. Генерация интервала

BEGIN
 FOR i IN 20..30 LOOP
  NULL;
 END LOOP;
END;

78. Контроль итераций

BEGIN
 FOR i IN 1..17 LOOP
  NULL;
 END LOOP;
END;

79. Генерация диапазона

BEGIN
 FOR i IN 2..12 LOOP
  NULL;
 END LOOP;
END;

80. Проверка операций

BEGIN
 FOR i IN 1..19 LOOP
  NULL;
 END LOOP;
END;

81. Подсчёт элементов

BEGIN
 FOR i IN 1..21 LOOP
  NULL;
 END LOOP;
END;

82. Генерация этапов

BEGIN
 FOR i IN 1..23 LOOP
  NULL;
 END LOOP;
END;

83. Контроль шагов

BEGIN
 FOR i IN 1..24 LOOP
  NULL;
 END LOOP;
END;

84. Генерация уровней

BEGIN
 FOR i IN 1..26 LOOP
  NULL;
 END LOOP;
END;

85. Проверка циклов

BEGIN
 FOR i IN 1..28 LOOP
  NULL;
 END LOOP;
END;

86. Итерация данных

BEGIN
 FOR i IN 1..29 LOOP
  NULL;
 END LOOP;
END;

87. Генерация позиций

BEGIN
 FOR i IN 1..31 LOOP
  NULL;
 END LOOP;
END;

88. Контроль диапазона

BEGIN
 FOR i IN 1..33 LOOP
  NULL;
 END LOOP;
END;

89. Проверка количества

BEGIN
 FOR i IN 1..35 LOOP
  NULL;
 END LOOP;
END;

90. Генерация значений

BEGIN
 FOR i IN 1..37 LOOP
  NULL;
 END LOOP;
END;

91. Контроль данных

BEGIN
 FOR i IN 1..39 LOOP
  NULL;
 END LOOP;
END;

92. Итерация записей

BEGIN
 FOR i IN 1..41 LOOP
  NULL;
 END LOOP;
END;

93. Генерация объектов

BEGIN
 FOR i IN 1..43 LOOP
  NULL;
 END LOOP;
END;

94. Контроль числа

BEGIN
 FOR i IN 1..45 LOOP
  NULL;
 END LOOP;
END;

95. Генерация операций

BEGIN
 FOR i IN 1..47 LOOP
  NULL;
 END LOOP;
END;

96. Проверка задач

BEGIN
 FOR i IN 1..49 LOOP
  NULL;
 END LOOP;
END;

97. Генерация итераций

BEGIN
 FOR i IN 1..51 LOOP
  NULL;
 END LOOP;
END;

98. Контроль процессов

BEGIN
 FOR i IN 1..53 LOOP
  NULL;
 END LOOP;
END;

99. Генерация проверок

BEGIN
 FOR i IN 1..55 LOOP
  NULL;
 END LOOP;
END;

100. Финальный цикл

BEGIN
 FOR i IN 1..60 LOOP
  NULL;
 END LOOP;
END;

Документация Oracle


Oracle FOR LOOP documentation


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

FLOAT в Oracle SQL — как работать с числами с плавающей точкой


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