Solucionar Error ORA-01722: Invalid Number

Higarigaoka - Odaiba, Sin comentarios
Hola!


En Oracle como en otras bases de datos, se presentan errores que a simple vista no deberían de ocurrir, que cuando se codifican se espera que no reviente un aplicativo en error, pero que en algunos casos si ocurren problemas, generando que nuestra base de datos no realice un debido proceso o peor aún que esta colapse, esto genera una serie de contratiempos y problemas que deben de ser solucionados en el termino de la distancia.

Por tal motivo y para esto, les mostrare hoy el Error ORA-01722: Invalid Number, el cual se presenta por una conversión implícita que no funciona correctamente, esto puede ocurrir por múltiples factores entre ellos:
  • Una conversión implícita pasando entre algún predicado en la cláusula WHERE, para esto se debe de comprobar si hay una columna numérica que se comparan a una columna de caracteres.
  • Si está utilizando la función to_number, asegúrese de que la máscara de formato se adapta a todas las posibles cadenas de caracteres en la tabla.
  • Si sabe que una columna contiene dos números válidos y cadenas de caracteres, asegúrese de que todas las filas que no contienen números válidos están siendo excluidos en la cláusula WHERE.
  • Si no hay dónde, sin máscara, simplemente "SELECT * FROM TABLE", y se produjo el error de código Java - localización establecida adecuada en su método de "execSQL": 
Locale locale = new Locale ( "en", "US", "WIN"); 
Locale.setDefault(locale); // luego continuar como de costumbre
connection = getConnect (); 
Statement statement = connection.createStatement();


Explicación Científica:
Causa: 
El intento de conversión de una cadena de caracteres a un número falló porque la cadena de caracteres no era un literal numérico válido . Sólo campos numéricos o los campos de caracteres que contienen datos numéricos se pueden usar en las funciones de cálculo o expresiones . Sólo los campos numéricos pueden sumarse o restarse de fechas. 
Solución:
Compruebe las cadenas de caracteres en la función o expresión . Comprobar que en ellos sólo números, el símbolo , un punto decimal , y la "E" carácter o "e " y repita la operación .

Ejemplo:
Cuando se produce el error ORA-01722:

SQL> select count(*) 
from articulos 
where almacen = 1 
and codigo = '255GH09' 
and id = 12345
and trim(provincia) = 'Madrid';
*
ERROR at line 5:
ORA-01722: invalid number

Siendo la columna "id" un VARCHAR2(20).

SOLUCIONES:
  • Colocar el número entre comillas simples. 
  • Utilizar o hacer una conversión a carácter usando la función TO_CHAR(12345).
Cualquiera de estas dos opciones solucionan este error.

Solucionado error:

SQL> select count(*)
from <table_name>
where almacen = 1 
and codigo = '255GH09' 
and id = '12345'
and trim(provincia) = 'Madrid';

<-------------------------------------------------------   Ó  -------------------------------------------------->

SQL> select count(*)
from <table_name>
where almacen = 1 
and codigo = '255GH09' 
and id = TO_CHAR(12345)
and trim(provincia) = 'Madrid';

Fuentes:

0 comentarios :

Publicar un comentario