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-06502
Aprenda por qué y cómo resolver los mensajes de error ORA-06502 en Oracle.
describir
Cuando encuentra un error ORA-06502, aparece el siguiente mensaje de error:
- ORA-06502: PL/SQL: error de número o valor
razón
Intentó ejecutar una declaración que resultó en un error aritmético, numérico, de cadena, de conversión o de restricción.
Las causas comunes de este error son:
- Intentó asignar un valor a una variable numérica, pero el valor es mayor de lo que la variable puede manejar.
- Intentó asignar un valor no numérico a una variable numérica y resultó en un error de conversión.
resolver
Veamos tres opciones sobre cómo resolver el error ORA-06502:
Opción #1 – valor demasiado grande
En nuestra primera opción, este error ocurre cuando intenta asignar un valor a una variable numérica, pero el valor es más grande de lo que la variable puede manejar.
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-06502 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-06502 ha sido resuelto.
SQL> execute TestProc(); PL/SQL procedure successfully completed.
Opción #2 – Error de conversión
En nuestra segunda opción, este error ocurre si intenta asignar un valor no numérico a una variable numérica.
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 := 'a'; 6 END; 7 / Procedure created.
Este proceso ha sido creado con éxito. Pero cuando intentamos ejecutar el proceso, obtenemos un error ORA-06502 como este:
SQL> execute TestProc(); BEGIN TestProc(); END; * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "EXAMPLE.TESTPROC", line 5 ORA-06512: at line 1
En este ejemplo, el valor de “a” no se convirtió correctamente a un valor numérico. Puede corregir este error asignando un valor numérico apropiado a la variable denominada v_number.
SQL> CREATE OR REPLACE PROCEDURE TestProc 2 AS 3 v_number number(2); 4 BEGIN 5 v_number := ASCII('a'); 6 END; 7 / Procedure created.
Ahora bien, cuando ejecutamos el programa TestProc, el error ORA-06502 ha sido resuelto.
SQL> execute TestProc(); PL/SQL procedure successfully completed.
Opción #3 – Asignar NULL a la variable de restricción NOT NULL
En nuestra tercera opción, este error ocurre si intenta asignar un valor NULL a una variable de restricción NOT NULL.
Por ejemplo, si creó un procedimiento llamado TestProc de la siguiente manera:
SQL> CREATE OR REPLACE PROCEDURE TestProc 2 AS 3 v_non_nullable_variable VARCHAR2(30) NOT NULL := '5'; 4 v_null_variable VARCHAR2(30) := NULL; 5 BEGIN 6 v_non_nullable_variable := v_null_variable; 7 EXCEPTION 8 WHEN OTHERS THEN 9 dbms_output.put_line(SQLERRM); 10 END; 11 / Procedure created.
Este proceso ha sido creado con éxito. Pero cuando intentamos ejecutar el proceso, obtenemos un error ORA-06502 como este:
ORA-06502: PL/SQL: numeric or value error
En este ejemplo, no puede asignar un valor NULL a una variable llamada v_non_nullable_variable. Puede corregir este error eliminando NOT NULL de la declaración de variable de v_non_nullable_variable de la siguiente manera:
SQL> CREATE OR REPLACE PROCEDURE TestProc 2 AS 3 v_non_nullable_variable VARCHAR2(30) := '5'; 4 v_null_variable VARCHAR2(30) := NULL; 5 BEGIN 6 v_non_nullable_variable := v_null_variable; 7 EXCEPTION 8 WHEN OTHERS THEN 9 dbms_output.put_line(SQLERRM); 10 END; 11 / Procedure created.