Oracle - expresiones del select que no puedo poner en where

 
Vista:
sin imagen de perfil

expresiones del select que no puedo poner en where

Publicado por Elías (2 intervenciones) el 08/11/2014 18:41:57
Hola, amigos. Hace unos dias pedí ayuda acá con un query que me ha estado matando, muy amablemente me ayudaron con el query, pero simplemente no corre y es una porción del query la que no va.

Una subconsulta que me manda error de número inválido y explico.

Tengo la tabla factura que tiene "FACT_ANIO" y "FACT_MES" y debo relacionarla con una consulta al año mes de la fecha del sistema. El detalle es que el campo FACT_MES, como es un número no tiene el cero a la izquierda, así que uso un decode para en caso que haga falta anexarle el cero.

Si hago esto
1
2
select (f.Factano||decode(length(f.Factmes),1,0||f.factmes,f.factmes)), to_number(to_char(ADD_MONTHS(SYSDATE,-1),'YYYYMM'))
from smart.factura f
el código se ejecuta sin ningún inconveniente.

Pero si hago esto, que es lo que me interesa para ponerlo como subconsulta, me envía error de número inválido :
[code]SELECT 1 FROM smart.FACTURA f
WHERE (f.Factano||decode(length(f.Factmes),1,0||f.factmes,f.factmes))<= to_number(to_char(ADD_MONTHS(SYSDATE,-1),'YYYYMM'))[/code

Por favor, sus gratos consejos. Desde ya gracias.
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

expresiones del select que no puedo poner en where

Publicado por luis (235 intervenciones) el 10/11/2014 14:46:20
Fíjate en los tipos de datos que usas al realizar las operaciones, si el motor de BD oracle te muestra un mensaje de error es porque no estas haciendo bien las operaciones, y con los tipos de datos que tienes, valida también la información que estas manejando en la BD, si las condiciones que usas aplican a todos los datos de los campos de las tablas que usas.

Consejo, si vas a concatenar algo que sean caracteres, veo en tu sentencia que estas concatenando números, si bien es cierto la BD oracle implícitamente realiza una conversión de datos para realizar la concatenación esta conversión implica que la BD haga un trabajo adicional de conversión de datos, esto es tiempo y trabajo para algo que podemos evitar que lo haga demás, favor de optimizar el uso de las sentencias y usar las funciones adecuadas para cada caso.

Saludos

Luis Pablo
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