Anonim

Мережі баз даних визнають ім'я Oracle як енергосистему у світі системи управління реляційними базами даних (СУБД). Oracle протягом десятиліть виробляє дуже потужні рішення для СУБД і залишається лідером у цій галузі. Багато кінцевих користувачів продуктів баз даних можуть бути заплутані або збиті з глузду, коли вони використовують заздалегідь розроблене рішення, і це генерує повідомлення про помилку. Одне поширене повідомлення про помилку, вироблене Oracle - це помилка ORA-06512.

Також дивіться нашу статтю Як виправити помилку ora-00942

Oracle - це система управління базами даних, яка існує протягом сорока років у різних формах. Спочатку він використовував щось під назвою схема SCOTT, назване на честь одного з оригінальних співробітників Oracle. Ви навіть вперше ввійшли в Oracle з ім'ям користувача 'scott' та паролем 'tiger', який названий на честь кота Скотта. Зараз існує кілька схем, які використовуються в залежності від того, для чого ви використовуєте Oracle.

Якщо ви хочете дізнатися більше про Oracle з нуля, ця сторінка дуже корисна.

Виправлення помилок ORA-06512

В Oracle помилка ORA-06512 - це загальна помилка винятку, яка повідомляє про те, де щось йде не так. Це одна з найменш специфічних помилок, яку видає Oracle, оскільки вона говорить лише про те, що є проблема, але не те, що йде не так.

Наприклад, типове повідомлення про помилку може читати:

"ORA-01422: точний збір повертає більше, ніж вимагається кількість рядків

ORA-06512: на "DATABASE_NAME", рядок 66

ORA-06512: на лінії 1 ″

Перший рядок вказує вам, який тип помилки відбувається, в цьому випадку запит повертає більше даних, ніж очікує запит, тому він не знає, як з цим впоратися. Код "ORA-01422" - це фактичний код помилки, який потрібно шукати. ORA-06512 - це лише загальний код помилки.

Другий рядок повідомляє вам, де відбувається помилка. DATABASE_NAME буде будь-якою базою даних, в якій ви працюєте в той час. Рядок 66 - це рядок, де відбувається помилка, і це лінія, яку потрібно перевірити, щоб виправити помилку.

Третій рядок у синтаксисі помилок повідомляє, звідки надходить виклик. Перевірте рядок перший, і ви побачите дзвінок на DATABASE_NAME.

Щоб виправити цю конкретну помилку, вам потрібно виправити проблему, викликану ORA-01422, яка є "точний збір даних повертає більше, ніж потрібна кількість рядків", або вам потрібно додати обробник винятків, щоб сказати Oracle ігнорувати його. Оскільки вирішення основної проблеми завжди бажано, це шлях.

Можна зробити дві речі. Якщо ви очікуєте, що запит поверне більше, ніж один рядок, ви можете змінити його, щоб він не здивувався. Якщо ви очікуєте, що запит поверне один рядок, ви можете змінити його і для цього.

Очікуємо більше ніж один рядок:

для X in (виберіть * з t, де…)

петля

- обробіть запис X тут

кінцева петля;

Це повинно усунути помилку в запитах до бази даних, де було б повернуто більше одного рядка.

Якщо ви очікуєте повернення лише одного рядка, ви можете спробувати:

почати

виберіть * до….

з t де….

процес….

виняток

коли NO_DATA_FOUND, то

код обробки помилок, коли запису не знайдено

коли TOO_MANY_ROWS, то

код обробки помилок, коли знайдено занадто багато записів

кінець;

Цей другий метод повинен доставити лише один рядок, не викидаючи "ORA-01422: точний збір даних повертає більше, ніж потрібна кількість рядків", і, отже, початкова помилка ORA-06512.

Ви також можете налаштувати запит, щоб він повертав лише перший рядок відповіді з кількох рядків. Це може спрацювати, якщо ви не маєте повного контролю над базою даних або не хочете занадто багато возитися з речами, але все-таки потрібна відповідь.

заявити

курсор c1 для вибору * з t, де…

почати

відкритий c1;

отримати c1 в ..

якщо (c1% не знайдено), то

обробка помилок для запису не знайдено

закінчується, якщо;

близький c1;

кінець;

(Якщо ви знаєте SQL, ви можете бути трохи заплутані в цих командних рядках … Oracle не використовує Transact-SQL, а скоріше це власне розширення мови процедурних SQL, PL / SQL. Хоча подібний до Transact-SQL, PL / SQL робить багато розумних речей і є самим потужним інструментом. Цей PL / SQL FAQ може бути корисним при спробі дізнатися про Oracle.)

Отже, основний урок тут - це помилка ORA-06512, сама по собі, це не те, що можна виправити безпосередньо. Натомість ви повинні розібратися, що таке фактична помилка, про що вам скажуть інші коди помилок, а потім вирішувати ці помилки по черзі.

Чи є у вас які-небудь поради або підказки Oracle, якими слід поділитися? Повідомте про них у коментарях!

Як виправити помилки ora-06512 в oracle db