Anonim

Databasemavne genkender navnet Oracle som et kraftcenter i den relationelle databasestyringssystem (DBMS) verden. Oracle har produceret meget højdrevne DBMS-løsninger i årtier og er fortsat førende på området. Mange slutbrugere af databaseprodukter kan blive forvirrede eller forvirrede, når de bruger en forudindrettet løsning, og det genererer en fejlmeddelelse. En almindelig fejlmeddelelse produceret af Oracle er ORA-06512 fejlen.

Se også vores artikel Sådan rettes fejlen ora-00942

Oracle er et databasesystem, der har eksisteret i fyrre år i forskellige former. Den brugte oprindeligt noget kaldet SCOTT-skemaet, opkaldt efter en af ​​de originale medarbejdere hos Oracle. Du har endda logget ind på Oracle for første gang med brugernavnet 'scott' og adgangskoden 'tiger', der er opkaldt efter Scotts kat. Nu er der flere skemaer, der bruges, afhængigt af hvad du bruger Oracle til.

Hvis du gerne vil lære mere om Oracle fra bunden af, er denne side meget nyttig.

Rettelse af ORA-06512 fejl

I Oracle er en ORA-06512-fejl en generel undtagelsesfejl, der fortæller dig, hvor noget går galt. Det er en af ​​de mindst specifikke fejl produceret af Oracle, da den kun fortæller dig, at der er et problem, men ikke hvad der går galt.

For eksempel kan en typisk fejlmeddelelse muligvis læse:

“ORA-01422: nøjagtig hentning returnerer mere end det ønskede antal rækker

ORA-06512: ved “DATABASE_NAME”, linje 66

ORA-06512: på linje 1 ″

Den første linje fortæller dig, hvilken type fejl der sker, i dette tilfælde returnerer forespørgslen flere data, end forespørgslen forventer, så den ikke ved, hvordan den skal håndteres. 'ORA-01422' koden er den faktiske fejlkode, du skal se på. ORA-06512 er bare den generelle fejlkode.

Den anden linje fortæller dig, hvor fejlen opstår. DATABASE_NAME bliver den database, du arbejder i på det tidspunkt. Linie 66 er den linje, hvor fejlen sker, og er den linje, du skal kontrollere for at rette fejlen.

Den tredje linje i fejlsyntaxen fortæller dig, hvor opkaldet kommer fra. Kontroller linje 1, så ser du et opkald til DATABASE_NAME.

For at løse denne specielle fejl, skal du løse problemet forårsaget af ORA-01422, som er 'nøjagtig hentning returnerer mere end det anmodede antal rækker', eller du skal tilføje en undtagelsesbehandler for at fortælle Oracle at ignorere det. Da det altid er at foretrække at løse kerneproblemet, er dette vejen at gå.

Der er to ting, du kan gøre. Hvis du forventer, at forespørgslen returnerer mere end en enkelt række, kan du ændre den, så den ikke bliver overrasket. Hvis du kun forventer, at forespørgslen returnerer en enkelt række, kan du også ændre den til det.

Forventer mere end en enkelt række:

for X ind (vælg * fra t hvor …)

løkke

- behandle X-posten her

slutsløjfe;

Dette skal udrydde fejlen i databaseforespørgsler, hvor mere end en række ville blive returneret.

Hvis du kun forventer, at en enkelt række skal returneres, kan du prøve:

begynde

vælg * ind….

fra t hvor….

behandle….

undtagelse

når NO_DATA_FOUND derefter

fejlhåndteringskode, når der ikke findes nogen poster

når TOO_MANY_ROWS derefter

fejlhåndteringskode, når der findes for mange poster

ende;

Denne anden metode skal levere kun den ene række uden at smide 'ORA-01422: nøjagtig hentning returnerer mere end det anmodede antal rækker' fejl og derfor den oprindelige ORA-06512 fejl.

Du kan også justere forespørgslen, så den kun returnerer den første række i et svar med flere rækker. Dette fungerer muligvis, hvis du ikke har fuld kontrol over databasen eller ikke vil rod med tingene for meget, men stadig har brug for et svar.

erklære

c1 markør for at vælge * fra t hvor …

begynde

åben c1;

hente c1 ind ..

hvis (c1% ikke fundet) så

fejlhåndtering uden registrering fundet

Afslut Hvis;

tæt c1;

ende;

(Hvis du kender SQL, kan du måske være lidt forvirret af disse kommandolinjer … Oracle bruger ikke Transact-SQL, men snarere dets egen proceduresprogudvidelse af SQL, PL / SQL. Mens den ligner Transact-SQL, gør PL / SQL mange smarte ting og er et meget magtfuldt værktøj i sig selv. Du kan muligvis finde denne PL / SQL FAQ ofte nyttigt, når du prøver at lære om Oracle.)

Så den grundlæggende lektion her er end en ORA-06512 fejl, i sig selv, er ikke noget, du kan rette direkte. I stedet skal du finde ud af, hvad den faktiske fejl er, som de andre fejlkoder vil fortælle dig, og derefter adressere disse fejl en efter en.

Har du nogle Oracle-tip eller -tricks, du kan dele? Fortæl os om dem i kommentarerne!

Sådan rettes ora-06512 fejl i oracle db