Мениджърите на базата данни ще разпознаят името Oracle като мощност в света на системата за управление на релационни бази данни (СУБД). Oracle произвежда много мощни DBMS решения в продължение на десетилетия и остава лидер в областта. Много крайни потребители на продукти от база данни могат да бъдат объркани или объркани, когато използват предварително проектирано решение и то генерира съобщение за грешка. Едно често съобщение за грешка, произведено от 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 записа тук
краен контур;
Това трябва да премахне грешката в заявките към базата данни, при които ще бъдат върнати повече от един ред.
Ако очаквате само един ред да бъде върнат, можете да опитате:
започвам
изберете * в….
от т където….
процес ….
изключение
когато NO_DATA_FOUND тогава
код за обработка на грешки, когато не е намерен запис
когато TOO_MANY_ROWS тогава
код за обработка на грешки, когато са намерени твърде много записи
край;
Този втори метод трябва да достави само един ред, без да изхвърля 'ORA-01422: точното извличане връща повече от искания брой грешки и следователно оригиналната грешка ORA-06512.
Можете също да настроите заявката, така че тя да върне само първия ред от отговора на няколко реда. Това може да работи, ако нямате пълен контрол над базата данни или не искате да се забърквате с нещата твърде много, но все пак се нуждаете от отговор.
декларирам
c1 курсор за избор * от t където…
започвам
отворен c1;
извлечете c1 в ..
ако (c1% не се намери), тогава
обработка на грешка, тъй като няма намерен запис
край ако;
затваряйте с1;
край;
(Ако знаете SQL, може да сте малко объркани от тези командни редове … Oracle не използва Transact-SQL, а по-скоро е собствено разширяване на процедурен език на SQL, PL / SQL. Докато подобно на Transact-SQL, PL / SQL прави много умни неща и е много мощен инструмент сам по себе си. Може да намерите този PL / SQL FAQ често полезен, когато се опитвате да научите за Oracle.)
Така че основният урок тук е грешка ORA-06512, сама по себе си, не е нещо, което можете да поправите директно. Вместо това трябва да разберете каква е действителната грешка, която ще ви кажат другите кодове за грешка, и след това да адресирате тези грешки една по една.
Имате ли някакви съвети или трикове на Oracle, които да споделите? Кажете ни за тях в коментарите!
