jucas1987
Lo que pasa es que puedes tener algunos registros del campo varchar que no puedan ser convertidos a numericos.
Mira este ejemplo
Código SQL:
Ver originalSQL> CREATE TABLE conversion(num1 INTEGER,num2 varchar2(10));
Tabla creada.
SQL> INSERT INTO conversion VALUES(33,'033');
1 fila creada.
SQL> SELECT *FROM conversion WHERE num1 = CAST(num2 AS NUMBER);
NUM1 NUM2
---------- ----------
33 033
SQL> SELECT *FROM conversion WHERE num1 = to_number(num2);
NUM1 NUM2
---------- ----------
33 033
SQL> INSERT INTO conversion VALUES(55,'055t5');
1 fila creada.
SQL> SELECT *FROM conversion WHERE num1 = CAST(num2 AS NUMBER);
ERROR:
ORA-01722: numero no valido
ninguna fila seleccionada
SQL> SELECT *FROM conversion WHERE num1 = to_number(num2);
ERROR:
ORA-01722: numero no valido
ninguna fila seleccionada
SQL>
Fijate que el error empieza a salir cuando insertamos una t entre el numero y ya no puede ser convertido.
Debes revisar que registro(s) te interfieren en el casteo del campo. Por que las funciones de conversiòn parece que las estas utilizando bien.
saludos