sql >> Database teknologi >  >> RDS >> Oracle

Sådan løses ORA-06512 på linjenummer

Indholdsfortegnelse

Beskrivelse i Oracle-database

ORA-06512 i oracle er en af ​​de almindelige fejl, der ses i PLSQL-programmer i Oracle-databasen

Her er, hvad Oracle-dokumentationen siger om denne fejl

Reference:Oracle-dokumentation

Du kan altid finde dette ved at skrive nedenfor i Unix

oerr ORA 06512

Forklaring af ORA-06512-fejlen:

Fejl ORA-06512 betyder, at tilbagesporingsmeddelelsen, når stakken afvikles af ubehandlede undtagelser i din PLSQL-kode. Dette er en opsamlende fejl for alle PLSQL-undtagelser og ses ofte.

ORA 6512 angiver ikke den faktiske fejl, men linjenummeret på den ubehandlede fejl i PLSQL-koden. ORA-6512 vil typisk vises i en meddelelsesstak, hvori den foregående meddelelse navngiver årsagen til fejlen, f.eks. i følgende eksempel:

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

I ovenstående er den gule fremhævede fejl hovedfejlen

Årsager til ORA-06512-fejl:

Mulighederne for at løse denne Oracle-fejl er:

1) Ret den tilstand, der forårsager den uhåndterede fejl.
2) Skriv en undtagelseshandler for denne uhåndterede fejl.
3) Kontakt din Oracle DBA for at få hjælp.

Eksempler på ORA-06512:

Lad os se nogle eksempler på, hvordan man arbejder på det

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

I eksemplet ovenfor bliver proceduren kompileret med succes, men den gav fejl under udførelse

Så den faktiske fejl er fejlen

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

Vi kan nemt rette det ved at øge størrelsen af ​​variablen

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.

Vi kan også løse dette ved at bruge undtagelseshåndtering

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.

Et andet eksempel ville væ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

Her er ORA-01422 den rigtige fejl. vi har mere end 1 rækker i db_node-tabellen og får flere værdier for node. Så én rettelse kunne være at begrænse én række

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.

Et andet eksempel ville væ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

Her er ORA-01403 den rigtige fejl. vi har ingen rækker i db_node oracle table, og vi får ingen data fundet fejl. Så en løsning kunne være at sætte undtagelseshåndtering

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.

Nogle flere eksempler kan være på SYS.UTL_FILE

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

Her er hovedfejlen ORA-29283. Tjek løsningen ved at klikke på linket

Håber du kan lide dette indlæg på ORA-6512 Fejlmeddelelse

Relaterede artikler
ORA-00911
ORA-03113
ORA-00257
ORA-27154
ORA-29913
ORA-20001 i Saml skemastatistik på 11g(FND_HISTOGRAM_COLS )

  1. SEC_CASE_SENSITIVE_LOGON Forældet i 12c

  2. Hvordan tilføjer man brugerdefinerede attributter til SQL-forbindelsesstrengen?

  3. ROUND(dato) Funktion i Oracle

  4. Hvordan MAKE_SET() virker i MariaDB