Anonim

Datu bāzu mavenes atpazīs vārdu Oracle kā pastiprinātāju relāciju datu bāzes pārvaldības sistēmas (DBVS) pasaulē. Oracle gadu desmitiem ilgi ir ražojis ļoti jaudīgus DBMS risinājumus un joprojām ir līderis šajā jomā. Daudzi datu bāzes produktu galalietotāji var sajaukt vai sajaukt, kad viņi izmanto iepriekš izstrādātu risinājumu, un tas rada kļūdas ziņojumu. Viens izplatīts Oracle radītais kļūdas ziņojums ir kļūda ORA-06512.

Skatiet arī mūsu rakstu Kā novērst ora-00942 kļūdu

Oracle ir datu bāzes pārvaldības sistēma, kas dažādās formās darbojas jau četrdesmit gadus. Sākotnēji tas izmantoja kaut ko sauc par SCOTT shēmu, kas nosaukta pēc viena no sākotnējiem Oracle darbiniekiem. Jūs pat pirmo reizi pieteicāties Oracle ar lietotājvārdu 'scott' un paroli 'tīģeris', kas nosaukts pēc Skota kaķa. Tagad ir izmantotas vairākas shēmas atkarībā no tā, kam izmantojat Oracle.

Ja jūs vēlaties uzzināt vairāk par Oracle no sākuma, šī lapa ir ļoti noderīga.

Labojot ORA-06512 kļūdas

Oracle gadījumā ORA-06512 kļūda ir vispārēja izņēmuma kļūda, kas norāda, kur kaut kas notiek nepareizi. Tā ir viena no vismazāk specifiskajām Oracle radītajām kļūdām, jo ​​tā jums tikai saka, ka pastāv problēma, bet ne tā, kas notiek nepareizi.

Piemēram, tipisks kļūdas ziņojums varētu būt šāds:

“ORA-01422: precīza ienešana dod vairāk nekā pieprasītais rindu skaits

ORA-06512: “DATABASE_NAME”, 66. rinda

ORA-06512: 1. rindā ″

Pirmajā rindā ir norādīts, kāda veida kļūda notiek. Šajā gadījumā vaicājums atdod vairāk datu, nekā vaicājums sagaida, tāpēc tas nezina, kā ar to rīkoties. Kods “ORA-01422” ir faktiskais kļūdas kods, kas jums jāaplūko. ORA-06512 ir tikai vispārīgais kļūdas kods.

Otrajā rindā ir norādīts, kur rodas kļūda. DATABASE_NAME būs jebkura datu bāze, kurā tajā laikā strādājat. 66. rinda ir līnija, kurā notiek kļūda, un ir rinda, kas jums jāpārbauda, ​​lai labotu kļūdu.

Kļūdas sintakse trešajā rindā norāda, no kurienes nāk zvans. Pārbaudiet pirmo līniju, un jūs redzēsit zvanu uz DATABASE_NAME.

Lai labotu šo konkrēto kļūdu, jums jānovērš problēma, ko izraisa ORA-01422, proti, “precīza ienešana atgriež vairāk nekā pieprasītais rindu skaits” vai jāpievieno izņēmuma apstrādātājs, lai Oracle teiktu, ka tā tiek ignorēta. Tā kā vienmēr ir vēlams noteikt pamatjautājumu, tas ir veids, kā rīkoties.

Var darīt divas lietas. Ja paredzat, ka vaicājums atgriezīs vairāk nekā vienu rindu, varat to modificēt, lai tas nebūtu pārsteigts. Ja jūs domājat, ka vaicājums atgriezīs tikai vienu rindu, varat to modificēt arī šajā gadījumā.

Gaidāms vairāk nekā viena rinda:

X iekšā (atlasiet * no t, kur…)

cilpa

- apstrādājiet X ierakstu šeit

gala cilpa;

Tam būtu jānovērš kļūda datu bāzes vaicājumos, ja tiktu atgriezta vairāk nekā viena rinda.

Ja paredzat, ka tiks atgriezta tikai viena rinda, varat izmēģināt:

sākt

atlasiet * uz….

no t, kur….

process….

izņēmums

kad NO_DATA_FOUND tad

kļūdas apstrādes kods, kad ieraksts nav atrasts

kad TOO_MANY_ROWS

kļūdas apstrādes kods, ja tiek atrasts pārāk daudz ierakstu

beigas;

Ar šo otro metodi vajadzētu piegādāt tikai vienu rindu, neizlaižot 'ORA-01422: precīza atgūšana atgriež vairāk nekā pieprasītais rindu skaits kļūdas un līdz ar to sākotnējā ORA-06512 kļūda.

Vaicājumu varat arī pielāgot tā, lai tas atgrieztu tikai vairāku rindu atbildes pirmo rindu. Tas varētu darboties, ja jums nav pilnīgas kontroles pār datu bāzi vai nevēlaties pārāk daudz sajaukt ar lietām, bet jums joprojām ir nepieciešama atbilde.

paziņo

c1 kursors atlasiet * no t, kur…

sākt

atvērts c1;

ienest c1 uz ..

ja (c1% nav pamatots), tad

kļūdu apstrāde ierakstam nav atrasta

beigas, ja;

aizvērt c1;

beigas;

(Ja jūs zināt SQL, šīs komandrindas jūs varētu nedaudz sajaukt … Oracle neizmanto Transact-SQL, bet gan ir sava SQL, PL / SQL procesuālās valodas paplašinājums. Lai arī PL / SQL ir līdzīgs Transact-SQL daudz gudru lietu un pats par sevi ir ļoti spēcīgs rīks. Šis PL / SQL FAQ jums varētu būt noderīgs, mēģinot uzzināt par Oracle.)

Tātad pamata mācība šeit nav ORA-06512 kļūda pati par sevi, tas nav kaut kas, ko jūs varat tieši labot. Tā vietā jums ir jāizdomā, kāda ir faktiskā kļūda, ko jums pateiks pārējie kļūdu kodi, un pēc tam šīs kļūdas jānovērš pa vienam.

Vai jums ir kādi Oracle padomi vai triki, ar kuriem dalīties? Paziņojiet mums par viņiem komentāros!

Kā novērst ora-06512 kļūdas Oracle db