Як відловлювати помилки в oracle (plsql) exception, sqlerrm, sqlcode

Маленьке керівництво по відлову помилок в Oracle PLSQL.
Опис як використовувати в Oracle (PLSQL) функції SQLERRM і SQLCODE для вилову помилок EXCEPTION. з описом синтаксису і прикладом.

Функція SQLERRM повертає повідомлення про помилку пов'язане з останнім виникли винятком (помилкою).
Функція SQLERRM - не має параметрів.

Функція SQLCODE повертає код помилки пов'язаний з останнім виникли винятком (помилкою)
Функція SQLERRM - не має параметрів.

Зазвичай обробка винятків EXCEPTION виглядає наступним чином:

Ви можете використовувати функції SQLERRM і SQLCODE для виклику повідомлення про помилку наприклад таким чином:


Або ви можете зберегти повідомлення про помилку в таблицю таким чином:


Варіанти основних можливих помилок:

DUP_VAL_ON_INDEX
ORA-00001
При спробі зробити вставку INSERT або зміна UPDATE даних яке створює дублюючу запис порушує унікальний індекс (unique index).

TIMEOUT_ON_RESOURCE
ORA-00051
Відбувається коли ресурс над яким проводиться операція заблокований і відбулося скидання з таймаут.

TRANSACTION_BACKED_OUT
ORA-00061
Відбувся частковий відкат транзакції.

INVALID_CURSOR
ORA-01001
Спроба використовувати курсор якого не існує. Може відбуватися якщо ви намагаєтеся використовувати FETCH курсор або закрити CLOSE курсор до того як ви цей курсор відкрили OPEN.

NOT_LOGGED_ON
ORA-01012
Спроба зробити дії не залогінені.

LOGIN_DENIED
ORA-01017
Невдала спроба залогінитися, в доступі відмовлено, хибний користувач або пароль.

NO_DATA_FOUND
ORA-01403
Що з перерахованого: Спроба провести вставку SELECT INTO неіснуючого набору значень (select - нічого не повертає). Спроба завантажити неініціалізованої рядку / запису в таблиці. Спроба читання записи після закінчення файлу за допомогою пакета UTL_FILE.

TOO_MANY_ROWS
ORA-01422
Спроба вставити значення в змінну за допомогою SELECT INTO і select повернув більш ніж одне значення.

INVALID_NUMBER
ORA-01722
Спроба виконати SQL запит який провадить конвертацію рядки (STRING) в число (NUMBER) при цьому таке перетворення неможливо.

STORAGE_ERROR
ORA-06500
Або брак пам'яті, або помилка в пам'яті.

PROGRAM_ERROR
ORA-06501
Внутрішня програмна помилка рекомендується з такою помилкою звертатися в службу підтримки Oracle.

VALUE_ERROR
ORA-06502
Спроба виконати операцію конвертації даних яка закінчилася з помилкою (наприклад: округлення, перетворення типів, і т.п.).

CURSOR_ALREADY_OPEN
ORA-06511
Ви намагаєтеся відкрити курсор який вже відкритий.

Ось мабуть і все.