Oracle/PLSQL: mensaje de error ORA-06512

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: mensaje de error ORA-06512

Aprenda por qué y cómo resolver los mensajes de error ORA-06512 en Oracle.

describir

Cuando encuentra un error ORA-06512, aparece el siguiente mensaje de error:

  • ORA-06512: en línea <编号>

razón

Este error es causado por el desenrollado de la pila de excepciones no controladas en el código PLSQL.

Las opciones para resolver este error de Oracle son:

  1. Corrige la condición que causa el error no controlado.
  2. Escriba un controlador de excepciones para este error no controlado.
  3. Póngase en contacto con su DBA para obtener ayuda.

El mensaje de error ORA-06512 indica un número de línea erróneo no controlado en el código PLSQL. Esto es muy útil a la hora de solucionar problemas.

resolver

Opción n. ° 1: corregir las condiciones de error

Veamos un ejemplo de cómo resolver un error ORA-06512 arreglando la condición de error.

Por ejemplo, si creó un procedimiento llamado TestProc de la siguiente manera:

SQL> CREATE OR REPLACE PROCEDURE TestProc
  2  AS
  3    v_number number(2);
  4  BEGIN
  5    v_number := 100;
  6  END;
  7  /

Procedure created.

Este proceso ha sido creado con éxito. Pero cuando intentamos ejecutar el proceso, obtenemos un error ORA-06512 como este:

SQL> execute TestProc();
BEGIN TestProc(); END;

*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at "EXAMPLE.TESTPROC", line 5
ORA-06512: at line 1

La primera línea del mensaje de error (es decir, ORA-06502) indica que ocurrió un error, mientras que la segunda línea del mensaje de error (es decir, ORA-06512) indica que ocurrió el error en la línea 5 del código PLSQL.

En este ejemplo, intenta asignar un número de 3 dígitos a una variable llamada v_number, que solo puede manejar números de 2 dígitos. Puede corregir este error redefiniendo la variable v_number como número (3).

SQL> CREATE OR REPLACE PROCEDURE TestProc
  2  AS
  3    v_number number(3);
  4  BEGIN
  5    v_number := 100;
  6  END;
  7  /

Procedure created.

Ahora bien, cuando ejecutamos el programa TestProc, el error ORA-06512 ha sido resuelto.

SQL> execute TestProc();

PL/SQL procedure successfully completed.

Opción #2 – Escribir un controlador de excepciones

Veamos un ejemplo de cómo resolver un error ORA-06512 escribiendo un controlador de excepciones.

Por ejemplo, si creó un procedimiento llamado TestProc de la siguiente manera:

SQL> CREATE OR REPLACE PROCEDURE TestProc
  2  AS
  3    v_number number(2);
  4  BEGIN
  5    v_number := 100;
  6  END;
  7  /

Procedure created.

Este proceso ha sido creado con éxito. Pero cuando intentamos ejecutar el proceso, obtenemos un error ORA-06512 como este:

SQL> execute TestProc();
BEGIN TestProc(); END;

*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at "EXAMPLE.TESTPROC", line 5
ORA-06512: at line 1

La primera línea del mensaje de error (es decir, ORA-06502) indica que ocurrió un error, mientras que la segunda línea del mensaje de error (es decir, ORA-06512) indica que ocurrió el error en la línea 5 del código PLSQL.

En este ejemplo, intenta asignar un número de 3 dígitos a una variable llamada v_number, que solo puede manejar números de 2 dígitos. Cuando se produce este error, puede corregirlo escribiendo un controlador de excepciones para establecer la variable v_number en 99 (por lo que solo tiene 2 bits).

SQL> CREATE OR REPLACE PROCEDURE TestProc
  2  AS
  3    v_number number(2);
  4  BEGIN
  5    v_number := 100;
  6 EXCEPTION
  7   WHEN OTHERS THEN
  8      v_number := 99;
  9 END;
 10 /

Procedure created.

Ahora bien, cuando ejecutamos el programa TestProc, el error ORA-06512 ha sido resuelto.

SQL> execute TestProc();

PL/SQL procedure successfully completed.