WHILE в Oracle PL/SQL — 100 практических примеров

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

WHILE — один из самых аккуратных циклов Oracle. Он не просто выполняет код. Он делает это только пока выполняется условие. Это делает код безопасным, предсказуемым и очень читаемым.

Синтаксис

WHILE condition LOOP
 statements;
END LOOP;

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

1. Простой инкремент

DECLARE
 v NUMBER:=1;
BEGIN
 WHILE v<=5 LOOP
  v:=v+1;
 END LOOP;
END;

2. Декремент значения

DECLARE
 v NUMBER:=10;
BEGIN
 WHILE v>0 LOOP
  v:=v-1;
 END LOOP;
END;

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

DECLARE
 i NUMBER:=1;
 s NUMBER:=0;
BEGIN
 WHILE i<=10 LOOP
  s:=s+i;
  i:=i+1;
 END LOOP;
END;

4. Удвоение значения

DECLARE
 v NUMBER:=2;
BEGIN
 WHILE v<100 LOOP
  v:=v*2;
 END LOOP;
END;

5. Рост с шагом

DECLARE
 v NUMBER:=0;
BEGIN
 WHILE v<50 LOOP
  v:=v+5;
 END LOOP;
END;

6. Уменьшение цены

DECLARE
 price NUMBER:=500;
BEGIN
 WHILE price>100 LOOP
  price:=price-25;
 END LOOP;
END;

7. Проверка EXIT WHEN

DECLARE
 v NUMBER:=1;
BEGIN
 WHILE v<100 LOOP
  EXIT WHEN v=10;
  v:=v+1;
 END LOOP;
END;

8. Генерация номеров

DECLARE
 id NUMBER:=100;
BEGIN
 WHILE id<105 LOOP
  DBMS_OUTPUT.PUT_LINE(id);
  id:=id+1;
 END LOOP;
END;

9. Подсчёт попыток

DECLARE
 tries NUMBER:=1;
BEGIN
 WHILE tries<=3 LOOP
  tries:=tries+1;
 END LOOP;
END;

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

DECLARE
 v NUMBER:=20;
BEGIN
 WHILE v<200 LOOP
  v:=v+20;
 END LOOP;
END;

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

DECLARE
 i NUMBER:=1;
BEGIN
 WHILE i<6 LOOP
  DBMS_OUTPUT.PUT_LINE(i*i);
  i:=i+1;
 END LOOP;
END;

12. Кубы

DECLARE
 i NUMBER:=1;
BEGIN
 WHILE i<5 LOOP
  DBMS_OUTPUT.PUT_LINE(i*i*i);
  i:=i+1;
 END LOOP;
END;

13. Деление до порога

DECLARE
 v NUMBER:=1000;
BEGIN
 WHILE v>10 LOOP
  v:=v/2;
 END LOOP;
END;

14. Рост процентов

DECLARE
 v NUMBER:=100;
BEGIN
 WHILE v<150 LOOP
  v:=v*1.05;
 END LOOP;
END;

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

DECLARE
 i NUMBER:=1;
BEGIN
 WHILE i<4 LOOP
  DBMS_OUTPUT.PUT_LINE('row');
  i:=i+1;
 END LOOP;
END;

16. Ограничение количества

DECLARE
 v NUMBER:=1;
BEGIN
 WHILE v<25 LOOP
  v:=v+3;
 END LOOP;
END;

17. Минимальный порог

DECLARE
 v NUMBER:=5;
BEGIN
 WHILE v<30 LOOP
  v:=v+2;
 END LOOP;
END;

18. Умножение до лимита

DECLARE
 v NUMBER:=3;
BEGIN
 WHILE v<500 LOOP
  v:=v*3;
 END LOOP;
END;

19. Снижение количества

DECLARE
 qty NUMBER:=80;
BEGIN
 WHILE qty>10 LOOP
  qty:=qty-7;
 END LOOP;
END;

20. Проверка диапазона

DECLARE
 v NUMBER:=15;
BEGIN
 WHILE v<60 LOOP
  v:=v+5;
 END LOOP;
END;

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

21. Итерация массива

DECLARE
 TYPE t IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
 a t;
 i NUMBER:=1;
BEGIN
 a(1):=10;
 a(2):=20;
 WHILE i<=2 LOOP
  DBMS_OUTPUT.PUT_LINE(a(i));
  i:=i+1;
 END LOOP;
END;

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

DECLARE
 TYPE t IS TABLE OF VARCHAR2(10) INDEX BY PLS_INTEGER;
 a t;
 i NUMBER:=1;
BEGIN
 a(1):='A';
 a(2):='B';
 WHILE i<=2 LOOP
  i:=i+1;
 END LOOP;
END;

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

DECLARE
 d DATE:=SYSDATE;
 i NUMBER:=1;
BEGIN
 WHILE i<5 LOOP
  DBMS_OUTPUT.PUT_LINE(d+i);
  i:=i+1;
 END LOOP;
END;

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

DECLARE
 d DATE:=SYSDATE;
BEGIN
 WHILE d<SYSDATE+10 LOOP
  d:=d+1;
 END LOOP;
END;

25. Поиск значения

DECLARE
 v NUMBER:=1;
BEGIN
 WHILE v<100 LOOP
  EXIT WHEN v=77;
  v:=v+1;
 END LOOP;
END;

26. Batch счётчик

DECLARE
 batch NUMBER:=1;
BEGIN
 WHILE batch<10 LOOP
  batch:=batch+1;
 END LOOP;
END;

27. Retry логика

DECLARE
 t NUMBER:=1;
BEGIN
 WHILE t<5 LOOP
  t:=t+1;
 END LOOP;
END;

28. Проверка статуса

DECLARE
 s NUMBER:=0;
BEGIN
 WHILE s<3 LOOP
  s:=s+1;
 END LOOP;
END;

29. Контроль загрузки

DECLARE
 load NUMBER:=10;
BEGIN
 WHILE load<100 LOOP
  load:=load+10;
 END LOOP;
END;

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

DECLARE
 v NUMBER:=7;
BEGIN
 WHILE v<70 LOOP
  v:=v+7;
 END LOOP;
END;

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

31. Увеличение депозита

DECLARE
 dep NUMBER:=1000;
BEGIN
 WHILE dep<2000 LOOP
  dep:=dep+100;
 END LOOP;
END;

32. Уменьшение остатка

DECLARE
 bal NUMBER:=900;
BEGIN
 WHILE bal>300 LOOP
  bal:=bal-50;
 END LOOP;
END;

33. Наращивание бонусов

DECLARE
 b NUMBER:=0;
BEGIN
 WHILE b<100 LOOP
  b:=b+10;
 END LOOP;
END;

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

DECLARE
 i NUMBER:=0;
BEGIN
 WHILE i<15 LOOP
  i:=i+1;
 END LOOP;
END;

35. Проверка флага

DECLARE
 flag NUMBER:=0;
BEGIN
 WHILE flag=0 LOOP
  flag:=1;
 END LOOP;
END;

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

DECLARE
 k NUMBER:=1;
BEGIN
 WHILE k<10 LOOP
  k:=k*1.5;
 END LOOP;
END;

37. Деление бюджета

DECLARE
 b NUMBER:=10000;
BEGIN
 WHILE b>100 LOOP
  b:=b/2;
 END LOOP;
END;

38. Генерация последовательности

DECLARE
 v NUMBER:=5;
BEGIN
 WHILE v<55 LOOP
  DBMS_OUTPUT.PUT_LINE(v);
  v:=v+5;
 END LOOP;
END;

39. Подсчёт заказов

DECLARE
 cnt NUMBER:=1;
BEGIN
 WHILE cnt<20 LOOP
  cnt:=cnt+1;
 END LOOP;
END;

40. Увеличение лимита

DECLARE
 l NUMBER:=100;
BEGIN
 WHILE l<1000 LOOP
  l:=l+100;
 END LOOP;
END;

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

41. Итерация курсора

DECLARE
 CURSOR c IS SELECT LEVEL n FROM dual CONNECT BY LEVEL<5;
 r c%ROWTYPE;
BEGIN
 OPEN c;
 FETCH c INTO r;
 WHILE c%FOUND LOOP
  FETCH c INTO r;
 END LOOP;
 CLOSE c;
END;

42. Fetch обработка

DECLARE
 CURSOR c IS SELECT 1 FROM dual;
 v NUMBER;
BEGIN
 OPEN c;
 FETCH c INTO v;
 WHILE c%FOUND LOOP
  FETCH c INTO v;
 END LOOP;
 CLOSE c;
END;

43. Обработка списка ID

DECLARE
 TYPE t IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
 a t;
 i NUMBER:=1;
BEGIN
 a(1):=5;
 a(2):=9;
 WHILE i<=2 LOOP
  i:=i+1;
 END LOOP;
END;

44. Контроль batch

DECLARE
 b NUMBER:=1;
BEGIN
 WHILE b<8 LOOP
  b:=b+1;
 END LOOP;
END;

45. Retry счётчик

DECLARE
 r NUMBER:=1;
BEGIN
 WHILE r<4 LOOP
  r:=r+1;
 END LOOP;
END;

46. Контроль процесса

DECLARE
 step NUMBER:=1;
BEGIN
 WHILE step<6 LOOP
  step:=step+1;
 END LOOP;
END;

47. Генерация тестовых чисел

DECLARE
 v NUMBER:=11;
BEGIN
 WHILE v<20 LOOP
  v:=v+1;
 END LOOP;
END;

48. Увеличение версии

DECLARE
 ver NUMBER:=1;
BEGIN
 WHILE ver<5 LOOP
  ver:=ver+1;
 END LOOP;
END;

49. Уменьшение веса

DECLARE
 w NUMBER:=120;
BEGIN
 WHILE w>80 LOOP
  w:=w-2;
 END LOOP;
END;

50. Подсчёт символов

DECLARE
 i NUMBER:=1;
BEGIN
 WHILE i<10 LOOP
  i:=i+1;
 END LOOP;
END;

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

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

DECLARE
 p NUMBER:=5;
BEGIN
 WHILE p<50 LOOP
  p:=p+5;
 END LOOP;
END;

52. Проверка температуры

DECLARE
 t NUMBER:=10;
BEGIN
 WHILE t<30 LOOP
  t:=t+2;
 END LOOP;
END;

53. Итерация задач

DECLARE
 j NUMBER:=1;
BEGIN
 WHILE j<12 LOOP
  j:=j+1;
 END LOOP;
END;

54. Снижение нагрузки

DECLARE
 l NUMBER:=90;
BEGIN
 WHILE l>30 LOOP
  l:=l-5;
 END LOOP;
END;

55. Увеличение скорости

DECLARE
 s NUMBER:=20;
BEGIN
 WHILE s<120 LOOP
  s:=s+10;
 END LOOP;
END;

56. Контроль памяти

DECLARE
 m NUMBER:=128;
BEGIN
 WHILE m<1024 LOOP
  m:=m*2;
 END LOOP;
END;

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

DECLARE
 n NUMBER:=3;
BEGIN
 WHILE n<30 LOOP
  n:=n+3;
 END LOOP;
END;

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

DECLARE
 i NUMBER:=1;
BEGIN
 WHILE i<5 LOOP
  DBMS_OUTPUT.PUT_LINE('log');
  i:=i+1;
 END LOOP;
END;

59. Проверка активности

DECLARE
 a NUMBER:=0;
BEGIN
 WHILE a<1 LOOP
  a:=1;
 END LOOP;
END;

60. Рост значения

DECLARE
 v NUMBER:=9;
BEGIN
 WHILE v<90 LOOP
  v:=v+9;
 END LOOP;
END;

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

61. Увеличение таймера

DECLARE
 t NUMBER:=1;
BEGIN
 WHILE t<60 LOOP
  t:=t+5;
 END LOOP;
END;

62. Обработка очереди

DECLARE
 q NUMBER:=1;
BEGIN
 WHILE q<7 LOOP
  q:=q+1;
 END LOOP;
END;

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

DECLARE
 s NUMBER:=1;
BEGIN
 WHILE s<4 LOOP
  s:=s+1;
 END LOOP;
END;

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

DECLARE
 b NUMBER:=2;
BEGIN
 WHILE b<32 LOOP
  b:=b*2;
 END LOOP;
END;

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

DECLARE
 f NUMBER:=1;
BEGIN
 WHILE f<15 LOOP
  f:=f+1;
 END LOOP;
END;

66. Уменьшение ошибок

DECLARE
 e NUMBER:=50;
BEGIN
 WHILE e>5 LOOP
  e:=e-5;
 END LOOP;
END;

67. Итерация проверок

DECLARE
 c NUMBER:=1;
BEGIN
 WHILE c<9 LOOP
  c:=c+1;
 END LOOP;
END;

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

DECLARE
 r NUMBER:=100;
BEGIN
 WHILE r<150 LOOP
  r:=r+5;
 END LOOP;
END;

69. Проверка попыток

DECLARE
 a NUMBER:=1;
BEGIN
 WHILE a<6 LOOP
  a:=a+1;
 END LOOP;
END;

70. Рост значения

DECLARE
 v NUMBER:=4;
BEGIN
 WHILE v<40 LOOP
  v:=v+4;
 END LOOP;
END;

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

71. Генерация парных чисел

DECLARE
 v NUMBER:=2;
BEGIN
 WHILE v<40 LOOP
  v:=v+2;
 END LOOP;
END;

72. Контроль обработки

DECLARE
 p NUMBER:=1;
BEGIN
 WHILE p<10 LOOP
  p:=p+1;
 END LOOP;
END;

73. Увеличение баллов

DECLARE
 pts NUMBER:=10;
BEGIN
 WHILE pts<100 LOOP
  pts:=pts+10;
 END LOOP;
END;

74. Проверка нагрузки

DECLARE
 l NUMBER:=5;
BEGIN
 WHILE l<25 LOOP
  l:=l+5;
 END LOOP;
END;

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

DECLARE
 lvl NUMBER:=1;
BEGIN
 WHILE lvl<6 LOOP
  lvl:=lvl+1;
 END LOOP;
END;

76. Снижение цены

DECLARE
 p NUMBER:=300;
BEGIN
 WHILE p>150 LOOP
  p:=p-15;
 END LOOP;
END;

77. Рост показателя

DECLARE
 k NUMBER:=2;
BEGIN
 WHILE k<64 LOOP
  k:=k*2;
 END LOOP;
END;

78. Проверка пакетов

DECLARE
 p NUMBER:=1;
BEGIN
 WHILE p<12 LOOP
  p:=p+1;
 END LOOP;
END;

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

DECLARE
 r NUMBER:=1;
BEGIN
 WHILE r<30 LOOP
  r:=r+3;
 END LOOP;
END;

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

DECLARE
 o NUMBER:=1;
BEGIN
 WHILE o<5 LOOP
  o:=o+1;
 END LOOP;
END;

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

81. Проверка времени

DECLARE
 t NUMBER:=0;
BEGIN
 WHILE t<24 LOOP
  t:=t+1;
 END LOOP;
END;

82. Рост нагрузки

DECLARE
 l NUMBER:=10;
BEGIN
 WHILE l<100 LOOP
  l:=l+10;
 END LOOP;
END;

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

DECLARE
 s NUMBER:=1;
BEGIN
 WHILE s<16 LOOP
  s:=s*2;
 END LOOP;
END;

84. Подсчёт циклов

DECLARE
 c NUMBER:=1;
BEGIN
 WHILE c<14 LOOP
  c:=c+1;
 END LOOP;
END;

85. Проверка блоков

DECLARE
 b NUMBER:=1;
BEGIN
 WHILE b<9 LOOP
  b:=b+1;
 END LOOP;
END;

86. Уменьшение значения

DECLARE
 v NUMBER:=70;
BEGIN
 WHILE v>35 LOOP
  v:=v-5;
 END LOOP;
END;

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

DECLARE
 s NUMBER:=5;
BEGIN
 WHILE s<55 LOOP
  s:=s+5;
 END LOOP;
END;

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

DECLARE
 n NUMBER:=8;
BEGIN
 WHILE n<80 LOOP
  n:=n+8;
 END LOOP;
END;

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

DECLARE
 l NUMBER:=30;
BEGIN
 WHILE l<300 LOOP
  l:=l+30;
 END LOOP;
END;

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

DECLARE
 d NUMBER:=6;
BEGIN
 WHILE d<60 LOOP
  d:=d+6;
 END LOOP;
END;

91. Итерация проверки

DECLARE
 i NUMBER:=1;
BEGIN
 WHILE i<11 LOOP
  i:=i+1;
 END LOOP;
END;

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

DECLARE
 t NUMBER:=1;
BEGIN
 WHILE t<18 LOOP
  t:=t+1;
 END LOOP;
END;

93. Увеличение ставки

DECLARE
 r NUMBER:=5;
BEGIN
 WHILE r<25 LOOP
  r:=r+5;
 END LOOP;
END;

94. Проверка роста

DECLARE
 g NUMBER:=2;
BEGIN
 WHILE g<32 LOOP
  g:=g*2;
 END LOOP;
END;

95. Генерация элементов

DECLARE
 e NUMBER:=1;
BEGIN
 WHILE e<13 LOOP
  e:=e+1;
 END LOOP;
END;

96. Контроль значений

DECLARE
 v NUMBER:=12;
BEGIN
 WHILE v<120 LOOP
  v:=v+12;
 END LOOP;
END;

97. Уменьшение нагрузки

DECLARE
 l NUMBER:=200;
BEGIN
 WHILE l>100 LOOP
  l:=l-10;
 END LOOP;
END;

98. Проверка диапазона

DECLARE
 d NUMBER:=14;
BEGIN
 WHILE d<70 LOOP
  d:=d+7;
 END LOOP;
END;

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

DECLARE
 s NUMBER:=9;
BEGIN
 WHILE s<90 LOOP
  s:=s+9;
 END LOOP;
END;

100. Финальный счётчик

DECLARE
 f NUMBER:=1;
BEGIN
 WHILE f<101 LOOP
  f:=f+1;
 END LOOP;
END;

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


Oracle WHILE documentation


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

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


 

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