Anonim

Database mavens zullen de naam Oracle herkennen als een krachtpatser in de relationele database managementsysteem (DBMS) wereld. Oracle produceert al tientallen jaren zeer krachtige DBMS-oplossingen en blijft een leider op dit gebied. Veel eindgebruikers van databaseproducten kunnen in de war raken of verbijsterd zijn wanneer ze een vooraf ontworpen oplossing gebruiken en deze genereert een foutmelding. Een veelvoorkomende foutmelding van Oracle is de ORA-06512-fout.

Zie ook ons ​​artikel De ora-00942-fout oplossen

Oracle is een databasebeheersysteem dat al veertig jaar bestaat in verschillende vormen. Het gebruikte oorspronkelijk iets genaamd het SCOTT-schema, genoemd naar een van de oorspronkelijke werknemers van Oracle. Je hebt je zelfs voor het eerst bij Oracle aangemeld met de gebruikersnaam 'scott' en het wachtwoord 'tijger' dat is vernoemd naar de kat van Scott. Nu worden er verschillende schema's gebruikt, afhankelijk van waarvoor u Oracle gebruikt.

Als u vanaf de basis meer wilt weten over Oracle, is deze pagina erg handig.

ORA-06512-fouten worden opgelost

In Oracle is een ORA-06512-fout een algemene uitzonderingsfout die aangeeft waar iets fout gaat. Het is een van de minst specifieke fouten die door Oracle worden gemaakt, omdat het je alleen vertelt dat er een probleem is, maar niet wat er misgaat.

Een typisch foutbericht kan bijvoorbeeld zijn:

“ORA-01422: exact ophalen retourneert meer dan gevraagd aantal rijen

ORA-06512: op “DATABASE_NAME”, regel 66

ORA-06512: op lijn 1 ″

De eerste regel geeft aan welk type fout er gebeurt, in dit geval retourneert de query meer gegevens dan de query verwacht, dus hij weet niet hoe ermee om te gaan. De code 'ORA-01422' is de werkelijke foutcode waarnaar u moet kijken. De ORA-06512 is slechts de algemene foutcode.

De tweede regel geeft aan waar de fout optreedt. De DATABASE_NAME wordt de database waarin u op dat moment werkt. Lijn 66 ​​is de lijn waar de fout optreedt en is de lijn die u moet controleren om de fout te corrigeren.

De derde regel in de foutsyntaxis geeft aan waar het gesprek vandaan komt. Controleer regel één en u ziet een oproep naar DATABASE_NAME.

Om deze specifieke fout op te lossen, moet u het probleem oplossen dat wordt veroorzaakt door ORA-01422, namelijk 'exact ophalen retourneert meer dan gevraagd aantal rijen' of u moet een uitzonderingshandler toevoegen om Oracle te vertellen het te negeren. Omdat het oplossen van de kernproblematiek altijd de voorkeur verdient, is dit de beste manier.

Er zijn twee dingen die je kunt doen. Als u verwacht dat de query meer dan één rij retourneert, kunt u deze aanpassen zodat hij niet verrast wordt. Als u verwacht dat de query slechts één rij retourneert, kunt u deze ook daarvoor wijzigen.

Verwacht meer dan één rij:

voor X in (selecteer * van t waar …)

lus

- verwerk het X-record hier

eind lus;

Dit zou de fout in databasequery's moeten verhelpen waar meer dan één rij zou worden geretourneerd.

Als u slechts één rij verwacht, kunt u het volgende proberen:

beginnen

selecteer * in ….

van t waar….

werkwijze….

uitzondering

wanneer NO_DATA_FOUND dan

foutafhandelingscode wanneer geen record is gevonden

wanneer TOO_MANY_ROWS dan

foutafhandelingscode wanneer te veel records zijn gevonden

einde;

Deze tweede methode zou alleen de enkele rij moeten opleveren zonder de fout 'ORA-01422: exact ophalen geeft meer dan gevraagd aantal rijen' en daarom de oorspronkelijke ORA-06512-fout.

U kunt de zoekopdracht ook aanpassen zodat deze alleen de eerste rij van een antwoord met meerdere rijen retourneert. Dit kan werken als u geen volledige controle over de database hebt of niet te veel met dingen wilt knoeien maar toch een antwoord nodig hebt.

verklaren

c1 cursor voor selecteren * van t waar …

beginnen

open cl;

haal c1 in ..

if (c1% niet gevonden) dan

foutafhandeling voor geen record gevonden

stop als;

sluit c1;

einde;

(Als je SQL kent, raak je misschien een beetje in de war door deze opdrachtregels … Oracle gebruikt geen Transact-SQL maar eerder een eigen procedurele taalextensie van SQL, PL / SQL. Hoewel vergelijkbaar met Transact-SQL, doet PL / SQL veel slimme dingen en is op zichzelf al een zeer krachtige tool. Misschien vindt u deze PL / SQL FAQ nuttig wanneer u Oracle probeert te leren kennen.)

Dus de basisles hier is dan een ORA-06512-fout, die op zichzelf niet iets is dat u rechtstreeks kunt oplossen. In plaats daarvan moet je uitzoeken wat de werkelijke fout is, die de andere foutcodes je zullen vertellen, en vervolgens die fouten een voor een aanpakken.

Heb je Oracle-tips of -trucs om te delen? Laat het ons weten in de reacties!

Hoe Ora-06512 Fouten in Oracle DB te repareren