Database mavens vil gjenkjenne navnet Oracle som et kraftsenter i den relasjonelle databasesystemet (DBMS) verden. Oracle har produsert svært høydrevne DBMS-løsninger i flere tiår og er fortsatt en ledende innen dette feltet. Mange sluttbrukere av databaseprodukter kan bli forvirrede eller forvirrede når de bruker en forhåndsdesignet løsning, og det genererer en feilmelding. En vanlig feilmelding produsert av Oracle er ORA-06512 feilen.
Se også artikkelen vår hvordan du løser ora-00942-feilen
Oracle er et databasesystem som har eksistert i førti år i forskjellige former. Den brukte opprinnelig noe som heter SCOTT-skjemaet, oppkalt etter en av de opprinnelige ansatte i Oracle. Du logget til og med på Oracle for første gang med brukernavnet 'scott' og passordet 'tiger' som er oppkalt etter Scotts katt. Nå er det flere skjemaer brukt avhengig av hva du bruker Oracle til.
Hvis du vil lære mer om Oracle fra første side, er denne siden veldig nyttig.
Å fikse ORA-06512 feil
I Oracle er en ORA-06512-feil en generell unntaksfeil som forteller deg hvor noe går galt. Det er en av de minst spesifikke feilene produsert av Oracle, da den bare forteller deg at det er et problem, men ikke hva som går galt.
For eksempel kan en typisk feilmelding lese:
“ORA-01422: nøyaktig henting returnerer mer enn ønsket antall rader
ORA-06512: på “DATABASE_NAME”, linje 66
ORA-06512: på linje 1 ″
Den første linjen forteller deg hvilken type feil som skjer. I dette tilfellet returnerer spørringen flere data enn spørringen forventer, slik at den ikke vet hvordan den skal håndteres. ORA-01422-koden er den faktiske feilkoden du trenger å se på. ORA-06512 er bare den generelle feilkoden.
Den andre linjen forteller deg hvor feilen oppstår. DATABASE_NAME blir den databasen du jobber i den gang. Linje 66 er linjen der feilen skjer, og er linjen du må sjekke for å rette opp feilen.
Den tredje linjen i feilsyntaxen forteller deg hvor samtalen kommer fra. Sjekk linje 1, så ser du en samtale til DATABASE_NAME.
For å fikse denne feilen, må du fikse problemet forårsaket av ORA-01422, som er "nøyaktig henting returnerer mer enn ønsket antall rader", eller du må legge til en unntakshåndterer for å be Oracle om å ignorere den. Ettersom å fikse kjernespørsmålet alltid er å foretrekke, er dette veien å gå.
Det er to ting du kan gjøre. Hvis du forventer at spørringen kommer tilbake mer enn en enkelt rad, kan du endre den slik at den ikke blir overrasket. Hvis du bare forventer at spørringen returnerer en enkelt rad, kan du endre den også.
Forventer mer enn en enkelt rad:
for X i (velg * fra t der …)
Løkke
- behandle X-posten her
sluttsløyfe;
Dette skal utrydde feilen i databaseforespørsler der mer enn en rad vil bli returnert.
Hvis du bare forventer at en enkelt rad skal returneres, kan du prøve:
begynne
velg * til….
fra t hvor….
prosess….
unntak
når NO_DATA_FOUND da
feilhåndteringskode når ingen poster blir funnet
når TOO_MANY_ROWS da
feilhåndteringskode når for mange poster blir funnet
slutt;
Denne andre metoden skal levere bare den ene raden uten å kaste opp 'ORA-01422: nøyaktig henting returnerer mer enn ønsket antall rader' og derfor den opprinnelige ORA-06512 feilen.
Du kan også finpusse spørringen slik at den bare returnerer den første raden i et svar med flere rader. Dette kan fungere hvis du ikke har fullstendig kontroll over databasen eller ikke vil tulle med ting for mye, men fortsatt trenger svar.
erklære
c1 markør for å velge * fra t der …
begynne
åpen c1;
hente c1 inn ..
hvis (c1% ikke funnet) da
feilhåndtering uten registrering
slutt om;
tett c1;
slutt;
(Hvis du kjenner SQL, kan du bli litt forvirret av disse kommandolinjene … Oracle bruker ikke Transact-SQL, men snarere er det en egen prosessuell språkutvidelse av SQL, PL / SQL. Selv om det ligner på Transact-SQL, gjør PL / SQL mange smarte ting og er et veldig kraftig verktøy i seg selv. Du kan synes at denne PL / SQL FAQ er nyttig når du prøver å lære om Oracle.)
Så den grunnleggende leksjonen her er enn en ORA-06512 feil, i seg selv, er ikke noe du kan fikse direkte. I stedet må du finne ut hva den faktiske feilen er, som de andre feilkodene vil fortelle deg, og deretter adressere disse feilene en etter en.
Har du noen tips eller triks fra Oracle du kan dele? Gi oss beskjed om dem i kommentarene!