Si no recuerdo mal, en mi instalación hemos tenido que hacer algo parecido pero 
ahora no lo encuentro. Se me ocurre lo siguiente:

      WHERE B.FECENT  = :W-FECHA
        AND (:w-horaini1 <> “  “ and B.HINIENT = :W-HORAINI1)
        AND (:w-horaini2 <> "    " and B.HINIENT = :W-HORAINI2)
        AND B.CODEST IN ("20", "25", "27")

Saludos

De: [email protected] 
[mailto:[email protected]] En nombre de Juan Ramón Garcia
Enviado el: martes, 12 de enero de 2016 16:04
Para: forum.help400
Asunto: COBOL y SQL embebido IF dentro de WHERE

Hola a tod@s:
Nunca me he encontrado con este problema pero...siempre hay una primera vez.
En un programa COBOL complicadísimo se utiliza SQL embebido para seleccionar 
una serie de registros cuyas características han sido seleccionadas por el 
usuario mediante una pantalla de opciones.
El caso es que quieren cambiar el orden de impresión de los registros pero, tal 
y como está el programa, habría que rehacerlo y utilizar un fichero temporal 
cosa que prefieren que no se haga.
La solución que se me ha ocurrido es condicionar algunas opciones del WHERE a 
si tiene o no tiene datos el campo correspondiente.
Una imagen vale más que mil palabras:

EXEC SQL
   DECLARE CUR5 CURSOR FOR
   SELECT B.PTOSERV, B.NPEDWEB, B.RUTA
      FROM FSPEDC3 A
      LEFT JOIN FPEDHIPC5 B
         ON A.NPEDWEB = B.NPEDWEB
      WHERE B.FECENT  = :W-FECHA
        AND B.HINIENT = :W-HORAINI
        AND B.CODEST IN ("20", "25", "27")
      ORDER BY A.CCIRCOD, B.HINIENT, B.RUTA, B.NPEDWEB
END-EXEC.
lo que necesitaría seria algo como esto: (lo escribo en minúsculas para que se 
distinga

EXEC SQL
   DECLARE CUR5 CURSOR FOR
   SELECT B.PTOSERV, B.NPEDWEB, B.RUTA
      FROM FSPEDC3 A
      LEFT JOIN FPEDHIPC5 B
         ON A.NPEDWEB = B.NPEDWEB
      WHERE B.FECENT  = :W-FECHA
if :w-horaini1 <> "    "
        AND B.HINIENT = :W-HORAINI1
end-if
if :w-horaini2 <> "    "
        AND B.HINIENT = :W-HORAINI2
end-if
        AND B.CODEST IN ("20", "25", "27")
      ORDER BY A.CCIRCOD, B.HINIENT, B.RUTA, B.NPEDWEB
END-EXEC.

Evidentemente no funciona y he probado con CASE y otras "cosas" que he 
encontrado por ahí pero no lo consigo y esto simplificaría mi problema.
¿Hay alguna forma de condicionar las sentencias del WHERE?
Un saludo.

Juanra
SqlCobolSaurio


____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Responder a