Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So beheben Sie ORA-06512 in Zeile num

Inhaltsverzeichnis

Beschreibung in Oracle-Datenbank

ORA-06512 in Oracle ist einer der häufigsten Fehler, der in PLSQL-Programmen in der Oracle-Datenbank auftritt

Folgendes sagt die Oracle-Dokumentation zu diesem Fehler

Referenz:Oracle-Dokumentation

Sie finden dies immer, indem Sie unten in Unix

eingeben

oerr ORA 06512

Erklärung des Fehlers ORA-06512:

Fehler ORA-06512 bedeutet die Backtrace-Nachricht, wenn der Stapel durch nicht behandelte Ausnahmen in Ihrem PLSQL-Code entladen wird. Dies ist ein Catch-all-Fehler für alle PLSQL-Ausnahmen und wird häufig angezeigt.

ORA 6512 gibt nicht den eigentlichen Fehler an, sondern die Zeilennummer des unbehandelten Fehlers im PLSQL-Code. ORA-6512 erscheint normalerweise in einem Nachrichtenstapel, in dem die vorangehende Nachricht den Grund für den Fehler nennt, wie im folgenden Beispiel:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 1112

Oben ist der gelb hervorgehobene Fehler der Hauptfehler

Gründe für ORA-06512-Fehler:

Die Optionen zum Beheben dieses Oracle-Fehlers sind:

1) Beheben Sie die Bedingung, die den nicht behandelten Fehler verursacht.
2) Schreiben Sie einen Ausnahmehandler für diesen nicht behandelten Fehler.
3) Wenden Sie sich an Ihren Oracle DBA, um Hilfe zu erhalten.

Beispiele für ORA-06512:

Sehen wir uns ein paar Beispiele an, wie man daran arbeitet

CREATE OR REPLACE PROCEDURE Testora_proc
AS
Site_name varchar2(5);
begin
site_name := 'techgoeasy.com';
end;
/
Procedure created.
sql> Exec Testora_proc
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 5

In dem oben angegebenen Beispiel wurde die Prozedur erfolgreich kompiliert, aber es gab Fehler während der Ausführung

Der eigentliche Fehler ist also der Fehler

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

Wir können dies leicht korrigieren, indem wir die Größe der Variablen erhöhen

CREATE OR REPLACE PROCEDURE Testora_proc
AS
Site_name varchar2(20);
begin
site_name := 'techgoeasy.com';
end;
/
Procedure created.
SQL> Exec Testoraproc
PL/SQL procedure successfully completed.

Wir können dies auch mit der Ausnahmebehandlung lösen

CREATE OR REPLACE PROCEDURE Testora_proc
AS
Site_name varchar2(5);
begin
site_name := 'techgoeasy.com';
EXCEPTION
WHEN OTHERS THEN
site_name := 'tech';
end;
/
Procedure created.SQL>Exec Testoraproc;
PL/SQL procedure successfully completed.

Ein anderes Beispiel wäre

CREATE OR REPLACE PROCEDURE Testora_proc
AS
node_name varchar2(5);
begin
select node into node_name from db_node;
end;
/
Procedure created
SQL> Exec Testora_proc;
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at “NODE_NAME”, line 4
ORA-06512: at line 1

Hier ist ORA-01422 der eigentliche Fehler. Wir haben mehr als 1 Zeile in der Tabelle db_node und erhalten mehrere Werte für den Knoten. Ein Fix könnte also eine Zeile einschränken

CREATE OR REPLACE PROCEDURE Testora_proc
AS
node_name varchar2(5);
begin
select node into node_name from db_node where rownum <2;
end;
/
Procedure created
SQL> Exec Testora_proc;
PL/SQL procedure successfully completed.

Ein anderes Beispiel wäre

CREATE OR REPLACE PROCEDURE Testora_proc
AS
node_name varchar2(5);
begin
select node into node_name from db_node;
end;
/
Procedure created
SQL> Exec Testora_proc;
ORA-01403: no data found
ORA-06512: at “NODE_NAME”, line 4
ORA-06512: at line 1

Hier ist ORA-01403 der eigentliche Fehler. Wir haben keine Zeilen in der Oracle-Tabelle db_node und wir erhalten den Fehler, dass keine Daten gefunden wurden. Eine Lösung könnte also darin bestehen, die Ausnahmebehandlung einzuführen

CREATE OR REPLACE PROCEDURE Testora_proc
AS
node_name varchar2(5);
begin
select node into node_name from db_node where rownum <2;
EXCEPTION WHEN NO_DATA_FOUND  
THEN 
node_name := 'tech'; 
end; 
/
Procedure created
SQL> Exec Testora_proc;
PL/SQL procedure successfully completed.

Einige weitere Beispiele können sich auf SYS.UTL_FILE

befinden
SQL> declare
F_LOG  utl_file.file_type;
begin
F_LOG := utl_file.fopen('TESTDIR','k', 'w');
end;
/  2    3    4    5    6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Hier ist der Hauptfehler ORA-29283. Überprüfen Sie die Lösung, indem Sie auf den Link klicken

Ich hoffe, Ihnen gefällt dieser Beitrag auf ORA-6512 Fehlermeldung

Verwandte Artikel
ORA-00911
ORA-03113
ORA-00257
ORA-27154
ORA-29913
ORA-20001 in Sammeln Sie Schemastatistiken auf 11g(FND_HISTOGRAM_COLS )