Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Urgente to_number, cast(as number) no me funcionan

Estas en el tema de Urgente to_number, cast(as number) no me funcionan en el foro de Oracle en Foros del Web. Buenos dias. Tengo el siguiente problema. Necesito enlazar dos tablas, para lo cual uso un inner join, los campos por los cuales voy a realizar ...
  #1 (permalink)  
Antiguo 15/02/2010, 08:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Exclamación Urgente to_number, cast(as number) no me funcionan

Buenos dias.

Tengo el siguiente problema.
Necesito enlazar dos tablas, para lo cual uso un inner join, los campos por los cuales voy a realizar el inner join son varchar2 de 7 bytes. Tengo que convertir estos a numericos para poder realizar el inner, ya que en una tabla aparecen de la siguiente manera 033 y en otra 33 y como ya sabran en varchar esto nunca va a ser igual; por lo tanto he realizado un cast y no me ha funcionado, he realizado un To_number y tampoco. de la misma manera he cambiado el to_number a integer, float y demas campos numericos que se me han ocurrido pero nada.

El query con el que estoy realizando la prueba es el siguiente:

SELECT ID_ACTIVIDAD, NOMBRE FROM TB_ACTIVIDADES
INNER JOIN XTB_RPT_DETALLE ON TO_NUMBER(TB_ACTIVIDADES.CODIGOOPERACION) = TO_NUMBER(XTB_RPT_DETALLE.COD_OPERACION)
WHERE CAST(COD_OFICNA AS NUMBER)=3

si quito los To_number, o cast si lo tuviera. me funciona, pero como se han de imaginar el resultado que obtengo no es el esperado, ya que la comparacion no es correcta.

El ERROR que obtengo al ejecutar el query, asi como esta es el siguiente:

ORA - 01722 : NUMERO NO VALIDO
01722.00000 "INVALID NUMBER"

Esto es algo con caracter urgente, asi que si me pudiesen colaborar se los agradeceria enormemente.
  #2 (permalink)  
Antiguo 15/02/2010, 08:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Urgente to_number, cast(as number) no me funcionan

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 original
  1. SQL> CREATE TABLE conversion(num1 INTEGER,num2 varchar2(10));
  2.  
  3. Tabla creada.
  4.  
  5. SQL> INSERT INTO conversion VALUES(33,'033');
  6.  
  7. 1 fila creada.
  8.  
  9. SQL> SELECT *FROM conversion WHERE num1 = CAST(num2 AS NUMBER);
  10.  
  11.       NUM1 NUM2
  12. ---------- ----------
  13.         33 033
  14.  
  15. SQL> SELECT *FROM conversion WHERE num1 = to_number(num2);
  16.  
  17.       NUM1 NUM2
  18. ---------- ----------
  19.         33 033
  20.  
  21. SQL> INSERT INTO conversion VALUES(55,'055t5');
  22.  
  23. 1 fila creada.
  24.  
  25. SQL> SELECT *FROM conversion WHERE num1 = CAST(num2 AS NUMBER);
  26. ERROR:
  27. ORA-01722: numero no valido
  28.  
  29.  
  30.  
  31. ninguna fila seleccionada
  32.  
  33. SQL> SELECT *FROM conversion WHERE num1 = to_number(num2);
  34. ERROR:
  35. ORA-01722: numero no valido
  36.  
  37.  
  38.  
  39. ninguna fila seleccionada
  40.  
  41. 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
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 15/02/2010, 11:27
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Urgente to_number, cast(as number) no me funcionan

No nada huesos.

todos los campos que tengo en la base son numeros, lo unico que los diferencia como ya dije anteriormente, es que unos tiene ceros y otros (0033 y 33).

La verdad no tengo la menor idea de que pueda ser, las funciones cast y to_number las he usado infinidad de veces, solo esta vez tengo problemas, si me puedes dar otro consejo te estare muy agradecido...
  #4 (permalink)  
Antiguo 15/02/2010, 12:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Urgente to_number, cast(as number) no me funcionan

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 original
  1. SQL> SELECT *FROM conversion;
  2.  
  3.       NUM1 NUM2
  4. ---------- ----------
  5.         33 033
  6.       1712 1712.000
  7. SQL>  SELECT *FROM conversion WHERE num1 = CAST(num2 AS NUMBER);
  8. ERROR:
  9. ORA-01722: numero no valido

Pero si cambiamos el punto por la coma funciona.
Código SQL:
Ver original
  1. SQL>  SELECT *FROM conversion WHERE num1 = CAST(REPLACE(num2,'.',',') AS NUMBER);
  2.  
  3.       NUM1 NUM2
  4. ---------- ----------
  5.         33 033
  6.       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
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 15/02/2010, 13:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Urgente to_number, cast(as number) no me funcionan

Nada huesos, los campos que tengo en la base son sencillos no tienen ni puntos ni comas, solo son numeros maximo de 3 cifras.
  #6 (permalink)  
Antiguo 15/02/2010, 13:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Urgente to_number, cast(as number) no me funcionan

jucas

te recomiendo hacer la comparación mas detallada. Es decir... con registros que estes seguro que no tienen problemas filtralos en el where para ver si te sale algo.

El error es claro y eso es lo que dice... puede que no lo veas a simple vista.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: funcionan, number
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:46.