sql >> Base de Datos >  >> RDS >> Oracle

Cómo resolver ORA-06512 en el número de línea

Índice

  • Descripción en la base de datos Oracle
  • Explicación del error ORA-06512:
  • Motivos del error ORA-06512:
  • Ejemplos de ORA-06512:

Descripción en base de datos Oracle

ORA-06512 en Oracle es uno de los errores comunes que se ven en los programas PLSQL en la base de datos Oracle

Esto es lo que dice la documentación de Oracle sobre este error

Referencia:documentación de Oracle

Puede encontrar esto siempre escribiendo a continuación en Unix

oerr ORA 06512

Explicación del error ORA-06512:

Error ORA-06512 significa el mensaje de seguimiento inverso a medida que la pila se desenrolla por excepciones no controladas en su código PLSQL. Este es un error general para todas las excepciones de PLSQL y se ve comúnmente.

ORA 6512 no indica el error real, sino el número de línea del error no manejado en el código PLSQL. ORA-6512 normalmente aparecerá en una pila de mensajes en la que el mensaje anterior indica el motivo del error, como en el siguiente ejemplo:

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

En lo anterior, el error resaltado en amarillo es el error principal

Motivos del error ORA-06512:

Las opciones para resolver este error de Oracle son:

1) Solucione la condición que está causando el error no controlado.
2) Escriba un controlador de excepciones para este error no controlado.
3) Póngase en contacto con su DBA de Oracle para obtener ayuda.

Ejemplos de ORA-06512:

Veamos algunos ejemplos de cómo trabajar en él

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

En el ejemplo anterior, el procedimiento se compiló con éxito pero dio errores durante la ejecución

Entonces el error real es el error

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

Podemos corregirlo fácilmente aumentando el tamaño de la variable

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.

También podemos resolver esto usando un controlador de excepciones

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.

Otro ejemplo sería

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

Aquí ORA-01422 es el error real. tenemos más de 1 filas en la tabla db_node y obtenemos múltiples valores para el nodo. Entonces, una solución podría ser restringir una fila

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.

Otro ejemplo sería

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

Aquí ORA-01403 es el error real. no tenemos filas en la tabla de Oracle db_node y no obtenemos ningún error de datos encontrados. Por lo tanto, una solución podría ser poner el manejo de excepciones

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.

Algunos ejemplos más pueden estar en 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

Aquí el error principal es ORA-29283. Compruebe la solución haciendo clic en el enlace

Espero que les guste esta publicación sobre ORA-6512 Mensaje de error

Artículos relacionados
ORA-00911
ORA-03113
ORA-00257
ORA-27154
ORA-29913
ORA-20001 en Recopilar estadísticas de esquema en 11g(FND_HISTOGRAM_COLS )