Anonim

Datenbankmanager erkennen den Namen Oracle als Kraftpaket in der Welt des relationalen Datenbankmanagementsystems (DBMS). Oracle stellt seit Jahrzehnten sehr leistungsstarke DBMS-Lösungen her und ist nach wie vor führend auf diesem Gebiet. Viele Endbenutzer von Datenbankprodukten können verwirrt oder verwirrt sein, wenn sie eine vordefinierte Lösung verwenden und eine Fehlermeldung generieren. Eine häufig von Oracle ausgegebene Fehlermeldung ist der ORA-06512-Fehler.

Lesen Sie auch unseren Artikel So beheben Sie den ora-00942-Fehler

Oracle ist ein Datenbankverwaltungssystem, das es seit vierzig Jahren in verschiedenen Formen gibt. Es wurde ursprünglich das SCOTT-Schema verwendet, das nach einem der ursprünglichen Mitarbeiter von Oracle benannt wurde. Sie haben sich sogar zum ersten Mal bei Oracle mit dem Benutzernamen "scott" und dem Kennwort "tiger" angemeldet, das nach Scotts Katze benannt ist. Je nachdem, wofür Sie Oracle verwenden, werden jetzt mehrere Schemata verwendet.

Wenn Sie von Grund auf mehr über Oracle erfahren möchten, ist diese Seite sehr nützlich.

Beheben von ORA-06512-Fehlern

In Oracle ist ein ORA-06512-Fehler ein allgemeiner Ausnahmefehler, der Ihnen mitteilt, wo etwas schief geht. Dies ist einer der am wenigsten spezifischen Fehler, die von Oracle verursacht werden, da nur ein Problem vorliegt, aber nicht, was falsch läuft.

Eine typische Fehlermeldung könnte beispielsweise lauten:

„ORA-01422: Exakter Abruf gibt mehr als die angeforderte Anzahl von Zeilen zurück

ORA-06512: In „DATABASE_NAME“, Zeile 66

ORA-06512: in Zeile 1 "

In der ersten Zeile wird angegeben, welcher Fehlertyp vorliegt. In diesem Fall gibt die Abfrage mehr Daten zurück als erwartet, sodass sie nicht weiß, wie sie damit umzugehen ist. Der 'ORA-01422'-Code ist der tatsächliche Fehlercode, den Sie anzeigen müssen. Der ORA-06512 ist nur der allgemeine Fehlercode.

In der zweiten Zeile sehen Sie, wo der Fehler auftritt. DATABASE_NAME ist die Datenbank, in der Sie gerade arbeiten. Zeile 66 ist die Zeile, in der der Fehler auftritt, und ist die Zeile, die Sie überprüfen müssen, um den Fehler zu beheben.

Die dritte Zeile in der Fehlersyntax gibt an, woher der Anruf kommt. Aktivieren Sie die erste Zeile, und Sie werden einen Aufruf von DATABASE_NAME sehen.

Um diesen speziellen Fehler zu beheben, müssen Sie das durch ORA-01422 verursachte Problem beheben, bei dem es sich um "Exakte Abrufretoure mit mehr als der angeforderten Anzahl von Zeilen" handelt, oder Sie müssen einen Ausnahmehandler hinzufügen, um Oracle anzuweisen, ihn zu ignorieren. Da die Behebung des Kernproblems immer vorzuziehen ist, ist dies der richtige Weg.

Sie können zwei Dinge tun. Wenn Sie erwarten, dass die Abfrage mehr als eine einzelne Zeile zurückgibt, können Sie sie so ändern, dass sie nicht überrascht wird. Wenn Sie nur erwarten, dass die Abfrage eine einzelne Zeile zurückgibt, können Sie sie auch dafür ändern.

Erwarten Sie mehr als eine einzelne Zeile:

für X in (wähle * von t wo …)

Schleife

- hier den X-Satz bearbeiten

Endschleife;

Dies sollte den Fehler in Datenbankabfragen beseitigen, bei denen mehr als eine Zeile zurückgegeben würde.

Wenn Sie nur erwarten, dass eine einzelne Zeile zurückgegeben wird, können Sie Folgendes versuchen:

Start

Wählen Sie * in….

von wo aus

Prozess….

Ausnahme

wenn dann NO_DATA_FOUND

Fehlerbehandlungscode, wenn kein Datensatz gefunden wird

wenn dann TOO_MANY_ROWS

Fehlerbehandlungscode, wenn zu viele Datensätze gefunden werden

Ende;

Diese zweite Methode sollte nur die einzelne Zeile liefern, ohne den Fehler 'ORA-01422: Exakter Abruf gibt mehr als die angeforderte Anzahl von Zeilen zurück' und daher den ursprünglichen Fehler ORA-06512.

Sie können die Abfrage auch so optimieren, dass sie nur die erste Zeile einer mehrzeiligen Antwort zurückgibt. Dies funktioniert möglicherweise, wenn Sie nicht die vollständige Kontrolle über die Datenbank haben oder nicht zu viel mit Dingen zu tun haben möchten, aber dennoch eine Antwort benötigen.

erklären

c1 Cursor für Auswahl * von t wo…

Start

open c1;

hol c1 in ..

if (c1% notfound) dann

Fehlerbehandlung für keinen Datensatz gefunden

ende wenn;

close c1;

Ende;

(Wenn Sie mit SQL vertraut sind, sind Sie möglicherweise ein wenig durch diese Befehlszeilen verwirrt. Oracle verwendet nicht Transact-SQL, sondern eine eigene prozedurale Spracherweiterung von SQL, PL / SQL. PL / SQL ähnelt jedoch Transact-SQL viele clevere Dinge und ist ein sehr leistungsfähiges Tool für sich selbst. Diese PL / SQL-FAQ kann hilfreich sein, wenn Sie sich mit Oracle vertraut machen möchten.)

Die grundlegende Lektion hier ist also, dass ein ORA-06512-Fehler an und für sich nichts ist, was Sie direkt beheben können. Stattdessen müssen Sie herausfinden, was der eigentliche Fehler ist, was Ihnen die anderen Fehlercodes mitteilen, und diese Fehler dann nacheinander beheben.

Haben Sie Tipps oder Tricks von Oracle, die Sie weitergeben möchten? Lass es uns in den Kommentaren wissen!

Wie man ora-06512-Fehler in oracle db behebt