Puede estar pasando que en el campo varchar tengas numeros con decimal y la configuraciòn regional de oracle no detecte un punto o una coma en el lugar correcto.
Por ejemplo..
3.200 podrìa ser 3.2 0 3200. o caso inverso.
mira este ejemplo
Código SQL:
Ver originalSQL> SELECT *FROM conversion;
NUM1 NUM2
---------- ----------
33 033
1712 1712.000
SQL> SELECT *FROM conversion WHERE num1 = CAST(num2 AS NUMBER);
ERROR:
ORA-01722: numero no valido
Pero si cambiamos el punto por la coma funciona.
Código SQL:
Ver originalSQL> SELECT *FROM conversion WHERE num1 = CAST(REPLACE(num2,'.',',') AS NUMBER);
NUM1 NUM2
---------- ----------
33 033
1712 1712.000
Esto se da, por que el punto (.) juega el papel de separador de miles y no separador decimal. si fuese separador de miles, esto nunca podrìa convertirse a numero, en cambio con la coma si se podrìa.
Si en tu configuración regional es al revés, debes invertir en el replace la coma y el punto.
saludos y espero soluciones el problema