В наші дні бази даних застосовуються всюди: в бухгалтерії, в бібліотеці, на складі. А найбільш великим постачальником програмного забезпечення для обробки інформації є фірма Oracle. Стандартна мова структурованих запитів SQL не підтримує цикли, однак вельми нерідко, для освіти звітів, наприклад, без циклів не обійтися. Тому корпорація Oracle зробила розширення цієї мови - PL / SQL.
Цикли призначені для багаторазового виконання конкретних операцій. В PL / SQL є 3 типи циклів:
- Безумовні цикли (нескінченні) - вихід з них не передбачений. Тому як такі цикли специфічні і застосовуються рідко, то організовуються вони за допомогою умовних циклів. Умова можливо взагалі не вказувати або замість нього застосовувати константу. Прикладом подібного циклу є машина LOOP. END LOOP.
- Умовні цикли - команди виконуються перш тих пір, поки істинно умова. Приклад, WHILE умова LOOP. END LOOP.
- Цикли з лічильником - цикл, в якому лічильник змінює своє значення з початкового перш кінцевого з певним етапом, і для будь-якого значення лічильника виконується послідовність команд, що знаходяться в циклі. Представником даного типу циклів є машина FOR лічильник IN стартове значеніе..конечное значення LOOP. END LOOP.
Найпростіший цикл, написаний на PL / SQL, виглядає так:
Такий цикл абсолютно безглуздий і небезпечний для для екземпляра БД, так як не має виходу. З таких циклів є три способи виходу:
- EXIT - це безумовний вихід. Зазвичай він використовується разом з оператором IF, в якому перевіряється умова виходу.
- EXIT WHEN - в цьому випадку вихід здійснюється ін при виконанні умови, описаного після WHEN.
- GOTO - в цьому випадку вихід з циклу здійснюється з переходом у зовнішній контекст, заданий міткою.
Давайте розглянемо приклад застосування циклу виду LOOP EXIT WHEN. Ось код:
Видимих дій цей код не виробляє, а й помилок теж! Перший цикл закінчується коли i стає рівною 100. При цьому вона обнуляється і здійснюється вихід з циклу. Наступний цикл застосовує вкладену конструкцію EXIT WHEN, використання якої є більш синтаксично правильним. Втім, застосування умовних операторів дозволяє виконати деякі дії перед тим як вийти з циклу. В цикл виду LOOP EXIT WHEN END LOOP є самим часто використовуваним циклом при побудові курсорів.
Ось ще один різновид циклу:
На відміну від раніше написаного коду, дії тут виконуються тільки поки істинно в круглих дужках. Якщо умова приймає помилкове значення, то виконання циклу припиняється.
У конструкціях циклів в PL / SQL немає оператора CONTINUE, який іноді є досить корисним. Це має місце тому, що вираз CONTINUE є зарезервірованим в мові PL / SQL для інших цілей. Втім, конструкцію CONTINUE можна штучно емулювати, за допомогою циклу LOOP EXIT WHEN END LOOP а також корисного, хоча і непопулярного, оператора GOTO.
Для прикладу виведемо непарні числа вполоть до 20 за допомогою циклу і GOTO:
Сподіваюся, тепер для вас не складе труднощів застосовувати цикли PL / SQL для побудові серверних додатків баз даних. )