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:
- Corrige la condición que causa el error no controlado.
- Escriba un controlador de excepciones para este error no controlado.
- 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.