Ya Alberto, a mi me pasa lo mismo, toda la vida en RPG y ahora COBOL me
pone "pegas" para hacer cosas sencillas (en RPG).
en C# si que había hecho estas cosas pero en COBOL...uffff

Un saludo y gracias.
Juanra

El 12 de enero de 2016, 16:50, alberto <[email protected]> escribió:

> Buenas Juanra
> Pues por darte una pista, yo te diría que en RPG ILE este tipo de cosas
> las hago con SQL dinámico, pero tambien te digo que no tiengo ni idea de
> cómo se mete el SQL diámico en Cobol.
>
>
>
> De:        Juan Ramón Garcia <[email protected]>
> Para:        "forum.help400" <[email protected]>
> Fecha:        12/01/2016 16:21
> Asunto:        COBOL y SQL embebido IF dentro de WHERE
> Enviado por:        [email protected]
> ------------------------------
>
>
>
> 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.
>
> ____________________________________________________
> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
> Forum.Help400 © Publicaciones Help400, S.L.
>
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Responder a