Header Ads Widget

Oracle: Error Número No Válido (ORA 6502 - Numeric or Value Error)


Si trabajas con Oracle y te está saliendo el error ORA 6502 Numeric Or Value Error en tu aplicación, básicamente lo que está ocurriendo es que estás tratando de convertir una cadena de caracteres en un número o una fecha y no es posible por el formato del valor.

Definición de ORA 6502: un error relacionado con operaciones aritméticas, númericas, cadenas o de conversión. Por ejemplo, intentar asigar un entero más grande que 999 a una variable declarada como NUMBER(3), o una variable declarada NOT NULL si un usuario intenta asignar el valor NULL.

Si tienes una cadena "236.23", sería un número válido, si es que el caracter de separador decimal es el punto ".", pero si fuera coma "," se mostrará el error.

¿Se entiende la idea?

Otra cosa, este error es cuando se asignan valores, cuando la conversión falla en un SELECT, el código es un 1722 (conversión a número) o 1843 (conversión a fecha).

Entonces, el problema sería cuando asignas un valor incorrecto a una variable o en un INSERT o un UPDATE.

Conviene revisar esas sentencias y los valores que se están usando (recuerda que también se produce con variables NOT NULL). Si los parámetros son de tipo cadena, y las variables o campos que reciben esos valores son de diferentes tipos hay que revisar bien el formato y las conversiones necesarias.

También puede producirse cuando se llama a un procedimiento almacenado y los tipos de datos o longitud de datos no coinciden con las variables de parámetros.

Es cuestión de trabajar un poco en analizar la información que se usa, lo que es algo que debería hacerse en cualquier caso.

ANEXOS:

Para evitar problemas con cadenas que no pueden convertirse en números, hay que identificar si una cadena puede ser un número.

Con esta función, se puede identificar si una cadena puede ser un número:

TRANSLATE(NOMBRE_CAMPO,'T 0123456789','T') IS NULL

Una variante, incluyendo caracteres que pueden aparecer en una expresión númerica:

TRANSLATE(NOMBRE_CAMPO,'T_0123456789 +-.,;:*!¡=/\()%^[]','T') IS NULL

Como siempre, la idea es aplicarlo según sea el caso. 


Publicar un comentario

0 Comentarios