Oracle - URGENTE To_number - cast(as number) no me funciona

   
Vista:

URGENTE To_number - cast(as number) no me funciona

Publicado por Julián Castaño (1 intervención) el 15/02/2010 15:06:47
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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:URGENTE To_number - cast(as number) no me funci

Publicado por Leonardo Josue (44 intervenciones) el 15/02/2010 23:27:55
Es posible que alguno de los valores que estás tratando de convertir no sea un número (puede ser un nulo o una cadena, tener un espacio en blanco etc) y es por eso que te marca error la conversión...

Prueba primeramente que las conversión del campo no marque error.

SELECT TO_NUMBER(TB_ACTIVIDADES.CODIGOOPERACION), ID_ACTIVIDAD, NOMBRE FROM TB_ACTIVIDADES

SELECT TO_NUMBER(XTB_RPT_DETALLE.COD_OPERACION) FROM XTB_RPT_DETALL

Si puedes ejecutar estas consultas, entonces puedes intentar hacer lo siguiente:

SELECT T1.ID_ACTIVIDAD, T1.NOMBRE FROM
(
SELECT TO_NUMBER(TB_ACTIVIDADES.CODIGOOPERACION) AS CODIGO, ID_ACTIVIDAD, NOMBRE FROM TB_ACTIVIDADES
) T1
INNER JOIN
(
SELECT TO_NUMBER(XTB_RPT_DETALLE.COD_OPERACION) AS CODIGO
FROM XTB_RPT_DETALLE
) T2 ON T1.CODIGO = T2.CODIGO

Si por el contrario, alguna de las consulta marca error entonces primero deberás excluir aquellos valores que no sean numeros antes de realizar tu consulta.

Saludos y espero que te pueda servir de algo.

Leonardo Josue
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar