complete guide pl sql exception handling with examples
У цьому посібнику пояснюється обробка винятків PL SQL та пов'язані з ними поняття, такі як типи винятків, визначені користувачем та визначені системою винятки, як створити виняток тощо:
В Формат дати / часу PL / SQL з PL / SQL серія , ми дізналися про деякі корисні функції навколо Datetime, Timestamp та Interval
У цій статті ми обговоримо обробку винятків у PL SQL. Крім того, ми вивчимо переваги винятків та способи їх використання.
Почнемо з навчань !!
Що ви дізнаєтесь:
PL Обробка винятків SQL
Помилка або подія попередження називається винятком. Це трапляється під час виконання програми PL / SQL. PL / SQL має механізми для обробки цих виняткових умов за допомогою блоку EXCEPTION коду, де визначено, як протидіяти умові помилки.
Є два типи винятків. Вони перелічені нижче:
- Виключення, визначені користувачем.
- Виключення, визначені системою.
Деякі з популярних визначених системою винятків є недостатньо помяті і ділення на нуль, мають такі імена, як STORAGE_ERROR та ZERO_DIVIDE відповідно. Виключення, що визначаються користувачем, оголошуються в пакеті, підпрограмі або в розділі декларації блоку коду PL / SQL і повинні отримувати імена.
Як тільки відбувається виняток, природний потік виконання зупиняється, і тоді виконання вказує на розділ винятків коду PL / SQL. У той час як визначені системою винятки викидаються за замовчуванням, визначені користувачем мають бути явно передані ключовим словом RAISE.
Таким чином, обробка винятків допомагає впоратися з помилками, які виникають під час виконання, а не під час компіляції програми.
Переваги обробки винятків
Переваги перераховані нижче:
- Якщо наш код не має обробки винятків, то кожного разу, коли ми виконуємо оператор, ми повинні перевіряти помилки у виконанні.
- Якщо ми уникаємо обробки винятків у нашому коді, фактичні помилки пропускаються, що породжує деякі інші помилки.
- Обробка винятків дозволяє пропустити кілька перевірок у коді.
- Це забезпечує кращу читабельність коду, ізолюючи обробники помилок у коді.
Синтаксис обробки винятків:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END; Виняток за замовчуванням здійснюється за допомогою КОЛИ інші ПОТІМ.
Давайте розглянемо таблицю, яка названа ГРОМАДЯН .
SELECT * FROM CITIZEN; 
Ми створили таблицю CITIZEN за допомогою наведеного нижче оператора SQL.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) ); Вставте значення до цієї таблиці з наведеними нижче операторами SQL:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37); Впровадження кодування з обробкою винятків:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; / Вихід вищевказаного коду:

У наведеному вище коді, оскільки в таблиці CITIZEN немає громадян, яким виповнилося 9 років, зазначено виняток часу роботи.
Збільшити виняток у PL / SQL
Виняток можуть бути розроблені розробниками явно за допомогою ключового слова RAISE.
дата випуску гарнітури для віртуальної реальності xbox -
Синтаксис для підвищення винятків:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END; Тут exception_n - це назва винятку, який ми піднімаємо. Таким чином, ми можемо створити як визначені користувачем, так і визначені системою винятки.
Визначений користувачем виняток
Розробники можуть створювати власні винятки та використовувати їх для обробки помилок. Вони можуть бути створені в частині декларації підпрограми, і доступ до них можна отримати лише всередині цієї підпрограми.
Виняток, який створюється на рівні пакета, можна використовувати щоразу, коли здійснюється доступ до пакета. Визначений користувачем виняток можна створити за допомогою ключового слова RAISE.
qa або ba, що краще
Синтаксис визначеної користувачем помилки:
DECLARE exception_n EXCEPTION;Ось, виняток_n - це назва винятку, який ми залучаємо. Таким чином, ми можемо оголосити виняток, вказавши ім'я, за яким слід ключове слово EXCEPTION. Виняток можна оголосити подібним чином, як оголошують змінні. Однак винятком є несподівана умова, а не елемент даних.
Сфера винятків у PL / SQL:
Правила сфери застосування винятку PL / SQL перелічені нижче:
- Виняток не може бути оголошено більше одного разу в одному блоці коду. Але ми можемо оголосити одне і те ж виняток у двох різних блоках коду.
- Виняток, оголошений всередині блоку коду, є локальним всередині цього блоку та загальним для кожного підблоку.
- Якщо ми знову оголосимо глобальний виняток всередині підблоку, локальне оголошення замінює.
Знову розглянемо таблицю, яка називається ГРОМАДЯНИН.
Впровадження коду з визначеними користувачем винятками:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; / Вихід вищевказаного коду:

Попередньо визначений виняток
Порушуючи правила бази даних або виходячи за межі залежного від системи порогового значення, внутрішній виняток створюється автоматично. Усі ці помилки мають унікальний номер, і кожен виняток визначається як ім’я. Наприклад, PL / SQL видає попередньо визначений виняток NO_DATA_FOUND, коли запит SELECT не отримує рядків.
Усі заздалегідь визначені винятки PL / SQL декларуються в пакеті STANDARD, який стосується середовища PL / SQL.
| Виняток | Помилка Oracle | КОД SQL | Опис |
|---|---|---|---|
| INVALID_NUMBER | ЧАС - 01722 | -1722 | Цей виняток виникає, якщо перетворення в рядок символів у число не проходить, оскільки рядок представляє недійсне число. |
| ACCESS_INTO_NULL | ЗАРАЗ - 06530 | -6530 | Цей виняток виникає, якщо нульовому об'єкту природно присвоєно значення. |
| CASE_NOT_FOUND | ЗАРАЗ - 06592 | -6592 | Цей виняток виникає, якщо не вибрано жодного з варіантів у реченні WHEN і не існує речення ELSE. |
| COLLECTION_IS_NULL | ЗАРАЗ - 06531 | -6531 | Цей виняток виникає, коли код намагається застосувати методи збору, крім ІСНУЄ, до вкладеної таблиці або масиву, який не ініціалізується. Його також можна підвищити, якщо наш код намагається призначити значення вкладеній таблиці або масиву, який не ініціалізується. |
| DUP_VAL_ON_INDEX | ЧАС - 00001 | -1 | Цей виняток виникає, якщо повторювані значення намагаються зберігати у стовпці, обмеженому унікальним індексом. |
| CURSOR_ALREADY_OPEN | ЗАРАЗ - 06511 | -6511 | Цей виняток виникає, якщо наш код намагається відкрити вже відкритий курсор. |
| INVALID_CURSOR | ЧАС - 01001 | -1001 | Цей виняток виникає, якщо ми намагаємось виконати деякі операції з курсорами, які заборонені. Наприклад, спроба закрити вже закритий курсор. |
| LOGIN_DENIED | ЧАС - 01017 | -1017 | Цей виняток виникає, якщо програма намагалася увійти в базу даних із неправильними іменем користувача та паролем. |
| ДАНИХ НЕ ЗНАЙДЕНО | ЧАС - 01403 | 100 | Цей виняток виникає, якщо запит SELECT не отримує рядків. |
| NOT_LOGGED_ON | ЧАС - 01012 | -1012 | Цей виняток виникає, якщо ми намагаємось виконати операцію з базою даних без підключення до неї. |
| PROGRAM_ERROR | ЧАС - 06501 | -6501 | Цей виняток виникає, якщо програма PL / SQL зазнала внутрішньої помилки. |
| ROWTYPE_MISMATCH | ЧАС - 06504 | -6504 | Цей виняток виникає, якщо курсор намагається повернути значення до змінної з несумісним типом даних. |
| SELF_IS_NULL | ЗАРАЗ - 30625 | -30625 | Цей виняток виникає, якщо метод-член викликається без ініціалізації його типу об'єкта. |
| STORAGE_ERROR | ЗАРАЗ - 06500 | -6500 | Цей виняток виникає, якщо в програмі PL / SQL не вистачає пам'яті або її пам'ять пошкоджена під час виконання. |
| TOO_MANY_ROWS | ЧАС - 01422 | -1422 | Цей виняток виникає, якщо запит SELECT отримує кілька рядків. |
| SUBSCRIPT_BEYOND_COUNT | ЗАРАЗ - 06533 | -6533 | Цей виняток виникає, якщо індекс перевищує загальну кількість елементів у колекції. |
| ПІДПИСАТИСЯ_OUTSIDE_LIMIT | ЗАРАЗ - 06532 | -6532 | Цей виняток виникає, якщо індекс перевищує пороговий діапазон. |
| SYS_INVALID_ROWID | ORA-01410 | -1410 | Цей виняток виникає, якщо перетворення в рядок символів в універсальний ідентифікатор рядка не проходить, оскільки рядок символів представляє недійсний ідентифікатор рядка. |
| TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Цей виняток виникає, якщо Oracle чекає ресурсу. |
| VALUE_ERROR | ORA-06502 | -6502 | Цей виняток виникає, якщо в нашій програмі трапляються математичні помилки, помилки перетворення та усічення. |
| ZERO_DIVIDE | ORA-01476 | -1476 | Цей виняток виникає, якщо ми намагаємось розділити число на 0. |
Часті запитання та відповіді
Q # 1) Що таке заздалегідь визначений виняток у PL / SQL?
Відповідь: Заздалегідь визначений виняток PL / SQL видає автоматично, якщо програма порушує правила бази даних.
Q # 2) Що таке PL / SQL обробка винятків і навіщо вона потрібна?
Відповідь: Помилка або несподівана подія в програмі називається винятком. Це зупиняє нормальний потік виконання програми. У PL / SQL виняток обробляється в блоці EXCEPTION у коді, а належні дії щодо винятку описуються всередині цього блоку.
Q # 3) Що мається на увазі під обробкою винятків?
Відповідь: Це метод реагування на несподівані події, які можуть відбутися під час виконання коду.
Q # 4) Які дві форми обробки помилок?
Відповідь: До них належать дві форми обробки помилок помилка часу компіляції і Помилка виконання . Помилка часу виконання відбувається під час виконання програми через неправильні дані або логіку. Помилки під час компіляції виявляються під час компіляції нашого коду.
Q # 5) У чому різниця між помилкою та винятком?
Відповідь: Виняток становлять випадки, які обробляються за допомогою блоку try / catch, і їх можна зустріти як під час компіляції, так і під час виконання програми. З іншого боку, помилки трапляються лише під час виконання.
Висновок
У цьому посібнику ми детально обговорили деякі основні концепції PL / SQL, які є важливими для управління винятками в наших програмах.
Ми розглянули наступні теми, перелічені нижче:
- Винятки.
- Види винятків.
- Деякі визначені винятки.
У наступному уроці ми обговоримо транзакції PL / SQL, концепції OOPS та багато інших пов'язаних тем.
Рекомендована література
- Підручник з обробки винятків C # із прикладами коду
- Винятки Java та обробка винятків з прикладами
- PL SQL-пакет: Підручник із пакету Oracle PL / SQL із прикладами
- Обробка винятків у C ++
- PL SQL Підручник для початківців з прикладами Що таке PL / SQL
- PL Підручник із записів SQL із прикладами