Mavens bazy danych rozpoznają nazwę Oracle jako potęgę w świecie systemów zarządzania relacyjnymi bazami danych (DBMS). Oracle od dziesięcioleci produkuje bardzo wydajne rozwiązania DBMS i pozostaje liderem w tej dziedzinie. Wielu użytkowników końcowych produktów bazodanowych może być zdezorientowanych lub zdezorientowanych, gdy korzystają z wcześniej zaprojektowanego rozwiązania i generuje komunikat o błędzie. Jednym z typowych komunikatów o błędach generowanych przez Oracle jest błąd ORA-06512.
Zobacz także nasz artykuł Jak naprawić błąd ora-00942
Oracle to system zarządzania bazą danych, który istnieje od czterdziestu lat w różnych formach. Pierwotnie używał czegoś zwanego schematem SCOTT, nazwanym na cześć jednego z pierwotnych pracowników Oracle. Zalogowałeś się nawet po raz pierwszy w Oracle za pomocą nazwy użytkownika „scott” i hasła „tygrys”, które nosi imię kota Scotta. Teraz istnieje kilka schematów używanych w zależności od tego, do czego używasz Oracle.
Jeśli chcesz dowiedzieć się więcej o Oracle od podstaw, ta strona jest bardzo przydatna.
Naprawianie błędów ORA-06512
W Oracle błąd ORA-06512 jest ogólnym błędem wyjątku, który informuje, gdzie coś jest nie tak. Jest to jeden z najmniej konkretnych błędów generowanych przez Oracle, ponieważ mówi tylko, że istnieje problem, ale nie to, co idzie nie tak.
Na przykład typowy komunikat o błędzie może brzmieć:
„ORA-01422: dokładne pobieranie zwraca więcej niż żądana liczba wierszy
ORA-06512: w „DATABASE_NAME”, wiersz 66
ORA-06512: w linii 1 ″
Pierwszy wiersz mówi, jaki typ błędu się zdarza, w tym przypadku zapytanie zwraca więcej danych, niż się spodziewa, więc nie wie, jak sobie z tym poradzić. Kod „ORA-01422” to rzeczywisty kod błędu, na który trzeba patrzeć. ORA-06512 to tylko ogólny kod błędu.
Drugi wiersz informuje, gdzie występuje błąd. DATABASE_NAME będzie bazą danych, w której aktualnie pracujesz. Linia 66 to linia, w której występuje błąd, i linia, którą należy sprawdzić, aby naprawić błąd.
Trzeci wiersz w składni błędu informuje, skąd pochodzi połączenie. Sprawdź linię pierwszą, a zobaczysz połączenie do DATABASE_NAME.
Aby naprawić ten konkretny błąd, musisz naprawić problem spowodowany przez ORA-01422, czyli „dokładne pobieranie zwraca więcej niż żądana liczba wierszy” lub musisz dodać moduł obsługi wyjątków, aby poinformować Oracle, aby go zignorował. Ponieważ zawsze najlepiej jest naprawić kluczową kwestię, taka jest droga.
Możesz zrobić dwie rzeczy. Jeśli oczekujesz, że zapytanie zwróci więcej niż jeden wiersz, możesz go zmodyfikować, aby nie był zaskoczony. Jeśli oczekujesz, że zapytanie zwróci tylko jeden wiersz, możesz go również zmodyfikować.
Oczekiwany więcej niż jeden wiersz:
dla X in (wybierz * z t gdzie…)
pętla
- przetwarzaj rekord X tutaj
pętla końcowa;
Powinno to wyeliminować błąd w zapytaniach do bazy danych, w których zwracany byłby więcej niż jeden wiersz.
Jeśli oczekujesz, że zostanie zwrócony tylko jeden wiersz, możesz spróbować:
zaczynać
wybierz * w….
skąd…
proces….
wyjątek
wtedy NO_DATA_FOUND
kod obsługi błędu, gdy nie znaleziono rekordu
wtedy TOO_MANY_ROWS
kod obsługi błędów, gdy znaleziono zbyt wiele rekordów
koniec;
Ta druga metoda powinna dostarczyć tylko jeden wiersz bez zgłaszania błędu „ORA-01422: dokładne pobieranie zwraca więcej niż żądana liczba wierszy”, a zatem oryginalny błąd ORA-06512.
Możesz również dostosować zapytanie, aby zwracało tylko pierwszy wiersz odpowiedzi z wieloma wierszami. Może to zadziałać, jeśli nie masz pełnej kontroli nad bazą danych lub nie chcesz zbytnio robić bałaganu, ale nadal potrzebujesz odpowiedzi.
ogłosić
kursor c1 do wyboru * z t gdzie…
zaczynać
otwórz c1;
pobierz c1 do ..
jeśli (c1% nie wykryto), to
obsługa błędów w przypadku braku rekordu
koniec jeśli;
zamknij c1;
koniec;
(Jeśli znasz SQL, możesz być trochę zdezorientowany tymi wierszami poleceń… Oracle nie używa Transact-SQL, ale raczej własne rozszerzenie języka proceduralnego SQL, PL / SQL. Chociaż jest podobny do Transact-SQL, PL / SQL robi wiele sprytnych rzeczy i samo w sobie jest bardzo potężnym narzędziem. Może ci się przydać FAQ PL / SQL przy próbie poznania Oracle.)
Podstawową lekcją jest więc błąd ORA-06512, sam w sobie nie jest czymś, co można naprawić bezpośrednio. Zamiast tego musisz dowiedzieć się, jaki jest rzeczywisty błąd, o czym poinformują inne kody błędów, a następnie usuń te błędy jeden po drugim.
Czy chcesz podzielić się wskazówkami lub sztuczkami Oracle? Daj nam znać o nich w komentarzach!