Databasmavar kommer att känna igen namnet Oracle som ett kraftcenter i DBMS-världen. Oracle har producerat mycket högdrivna DBMS-lösningar i årtionden och är fortfarande ledande inom området. Många slutanvändare av databasprodukter kan bli förvirrade eller förvirrade när de använder en förutbestämd lösning och det genererar ett felmeddelande. Ett vanligt felmeddelande som produceras av Oracle är ORA-06512-felet.
Se även vår artikel Hur du åtgärdar felet ora-00942
Oracle är ett databashanteringssystem som har funnits i fyrtio år i olika former. Den använde ursprungligen något som heter SCOTT-schema, uppkallat efter en av de ursprungliga anställda på Oracle. Du loggade till och med in på Oracle för första gången med användarnamnet 'scott' och lösenordet 'tiger' som är uppkallad efter Scotts katt. Nu finns det flera scheman som används beroende på vad du använder Oracle för.
Om du vill lära dig mer om Oracle från början är den här sidan mycket användbar.
Fixa ORA-06512-fel
I Oracle är ett ORA-06512-fel ett allmänt undantagsfel som säger var något går fel. Det är ett av de minst specifika fel som produceras av Oracle, eftersom det bara säger att det finns ett problem, men inte vad som går fel.
Till exempel kan ett typiskt felmeddelande läsa:
“ORA-01422: exakt hämtning returnerar mer än önskat antal rader
ORA-06512: vid “DATABASE_NAME”, rad 66
ORA-06512: på linje 1 ″
Den första raden berättar vilken typ av fel som händer, i detta fall returnerar frågan mer data än frågan förväntar sig så att den inte vet hur den ska hanteras. ORA-01422-koden är den faktiska felkoden du behöver titta på. ORA-06512 är bara den allmänna felkoden.
Den andra raden berättar var felet inträffar. DATABASE_NAME kommer att vara vilken databas du arbetar med just nu. Linje 66 är raden där felet händer och är den linje som du måste kontrollera för att korrigera felet.
Den tredje raden i felsyntaxen berättar var samtalet kommer ifrån. Kontrollera rad en så ser du ett samtal till DATABASE_NAME.
För att åtgärda det här felet måste du åtgärda problemet orsakat av ORA-01422, som är "exakt hämta mer än önskat antal rader" eller så måste du lägga till en undantagshanterare för att säga att Oracle ska ignorera det. Eftersom det alltid är att föredra att fixa kärnfrågan är detta vägen att gå.
Det är två saker du kan göra. Om du förväntar dig att frågan ska returnera mer än en enda rad kan du ändra den så att den inte blir förvånad. Om du bara förväntar dig att frågan ska returnera en enda rad kan du ändra den också för det.
Förväntar sig mer än en rad:
för X in (välj * från t där …)
slinga
- bearbeta X-posten här
ändslinga;
Detta bör radera felet i databasfrågor där mer än en rad skulle returneras.
Om du bara förväntar dig att en enda rad ska returneras kan du försöka:
Börja
välj * till….
från t där….
bearbeta….
undantag
när NO_DATA_FOUND då
felhanteringskod när ingen post hittas
när TOO_MANY_ROWS då
felhanteringskod när för många poster finns
slutet;
Denna andra metod ska leverera bara en rad utan att kasta upp 'ORA-01422: exakt hämtning ger mer än begärt antal rader-fel och därför det ursprungliga ORA-06512-felet.
Du kan också justera frågan så att den bara returnerar den första raden i ett svar med flera rader. Detta kan fungera om du inte har fullständig kontroll över databasen eller inte vill orka med saker för mycket men ändå behöver ett svar.
förklara
c1-markör för att välja * från t där …
Börja
öppen c1;
hämta c1 till ..
om (c1% notfound) då
felhantering för ingen post hittades
slut om;
stäng c1;
slutet;
(Om du känner till SQL, kan du bli lite förvirrad av dessa kommandorader … Oracle använder inte Transact-SQL utan snarare är det egna processuella språkförlängningen av SQL, PL / SQL. Även om det liknar Transact-SQL, PL / SQL gör många smarta saker och är ett mycket kraftfullt verktyg i sin egen rätt. Du kanske tycker att denna PL / SQL FAQ är användbar när du försöker lära dig mer om Oracle.)
Så den grundläggande lektionen här är än ett ORA-06512-fel, i sig själv, är inte något du kan fixa direkt. Istället måste du ta reda på vad det faktiska felet är, vilket de andra felkoderna kommer att berätta för dig, och sedan adressera dessa fel en efter en.
Har du några Oracle-tips eller tricks att dela? Låt oss veta om dem i kommentarerna!