Oracle/PLSQL: mensaje de error ORA-06502

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:

  1. Intentó asignar un valor a una variable numérica, pero el valor es mayor de lo que la variable puede manejar.
  2. 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.
(Visited 292 times, 1 visits today)