Mavens baze podataka prepoznat će ime Oracle kao pokretač u svijetu sustava za upravljanje relacijskim bazama podataka (DBMS). Oracle desetljećima proizvodi vrlo snažna DBMS rješenja i ostaje lider u ovom polju. Mnogi krajnji korisnici proizvoda baza podataka mogu biti zbunjeni ili zbunjeni kada koriste unaprijed dizajnirano rješenje i to generira poruku o pogrešci. Jedna uobičajena poruka o pogrešci koju je proizveo Oracle je pogreška ORA-06512.
Također pogledajte naš članak Kako popraviti pogrešku ora-00942
Oracle je sustav za upravljanje bazama podataka koji postoji već četrdeset godina u različitim oblicima. Prvobitno je koristio nešto što se naziva SCOTT shema, nazvano po jednom od originalnih zaposlenika Oracle-a. Čak ste se prvi put prijavili u Oracle korisničkim imenom 'scott' i lozinkom 'tiger' koja je dobila ime po Scottovoj mački. Sada se koristi nekoliko shema ovisno o čemu koristite Oracle.
Ako želite od početka naučiti više o Oracleu, ova je stranica vrlo korisna.
Ispravljanje pogrešaka ORA-06512
U Oracleu je pogreška ORA-06512 opća pogreška izuzeća koja vam govori gdje nešto ide po zlu. To je jedna od najmanje specifičnih pogrešaka koju proizvodi Oracle, jer vam govori samo da postoji problem, ali ne i što ide po zlu.
Na primjer, uobičajena poruka o pogrešci može glasiti:
"ORA-01422: točno dohvaćanje vraća više od zahtijevanog broja redaka
ORA-06512: kod "DATABASE_NAME", linija 66
ORA-06512: na liniji 1 ″
Prvi redak govori o vrsti pogreške koja se događa, u ovom slučaju upit vraća više podataka nego što upit očekuje, tako da ne zna kako s njim postupiti. Šifra 'ORA-01422' je stvarni kôd pogreške koji trebate pogledati. ORA-06512 je samo opći kod pogreške.
Drugi redak govori o tome gdje se pojavljuje greška. DATABASE_NAME postaje svaka baza podataka u kojoj tada radite. Redak 66 je linija u kojoj se greška događa i ona je linija koju trebate provjeriti da biste ispravili pogrešku.
Treći redak u sintaksi pogreške prikazuje odakle dolazi poziv. Provjerite liniju jedan i vidjet ćete poziv DATABASE_NAME.
Da biste riješili ovu određenu pogrešku, morate riješiti problem uzrokovan ORA-01422, a to je "točan dohvat vraća više od zahtijevanog broja redaka" ili trebate dodati alat za obradu izuzetaka kako biste rekli Oracleu da ga ignorira. Kako je uvijek poželjno riješiti problem, to je put.
Postoje dvije stvari koje možete učiniti. Ako očekujete da će se upit vratiti više od jednog retka, možete ga modificirati tako da se ne iznenadi. Ako očekujete da će upit vratiti samo jedan redak, možete ga i modificirati.
Očekuje više od jednog retka:
za X in (odaberite * od t gdje…)
petlja
- ovdje obradite X zapis
krajnja petlja;
Ovo bi trebalo iskorijeniti pogrešku u upitima baze podataka gdje bi se vratilo više reda.
Ako očekujete da se vraća samo jedan redak, možete pokušati:
početi
odaberite * u….
od t gdje….
postupak….
izuzetak
kad NO_DATA_FOUND tada
kod rukovanja pogreškama kada nije pronađen zapis
kada TOO_MANY_ROWS tada
kod rukovanja pogreškama kada se nađe previše zapisa
kraj;
Ova druga metoda trebala bi isporučiti samo jedan redak bez izbacivanja 'ORA-01422: točno dohvaćanje vraća više od zahtijevanog broja redaka', a time i izvornu pogrešku ORA-06512.
Upit možete i prilagoditi tako da on vraća samo prvi red odgovora s više redova. To bi moglo uspjeti ako nemate potpunu kontrolu nad bazom podataka ili se ne želite previše petljati s stvarima, ali još uvijek vam je potreban odgovor.
proglasiti
c1 kursor za odabir * od t gdje…
početi
otvoren c1;
dohvati c1 u ..
ako (c1% ne pronađeno) onda
rukovanje pogreškama jer nije pronađen zapis
završi ako;
zatvoriti c1;
kraj;
(Ako znate SQL, možda ćete biti malo zbunjeni ovim naredbenim linijama … Oracle ne koristi Transact-SQL, već je to vlastito proširenje proceduralnog jezika SQL-a, PL / SQL. Iako je sličan Transact-SQL-u, PL / SQL puno pametnih stvari i sam po sebi je vrlo moćan alat. Možda će vam ovaj PL / SQL FAQ biti koristan kad pokušavate naučiti o Oracleu.)
Dakle, osnovna pouka ovdje je greška ORA-06512, sama po sebi, nije nešto što možete izravno popraviti. Umjesto toga morate shvatiti koja je stvarna greška, što će vam reći drugi kodovi pogrešaka, a zatim rješavati te pogreške jednu po jednu.
Imate li neke Oracle savjete ili trikove za dijeljenje? Javite nam o njima u komentarima!