Hola Bernabé:

El código quedaría muy poco "elegante" y farragoso de comprender, yo os he
mandado un ejemplo sencillito pero intervienen 3 tablas, cada una de ellas
con decenas de elementos, las combinaciones AND y OR serían larguísimas.

Un saludo.
Juanra

El 12 de enero de 2016, 18:00, Bernabé Estrada <[email protected]>
escribió:

> Sin pensar, solo traduciendo tus if podría ser así:
>
>
> WHERE B.FECENT  = :W-FECHA and  (
>
> (:w-horaini1 <> "    " AND B.HINIENT = :W-HORAINI1)
>
> or
>
> (:w-horaini2 <> "    " AND B.HINIENT = :W-HORAINI2)
>
> )
>
>  AND B.CODEST IN ("20", "25", "27")
>
>
> El 12 de enero de 2016, 10:51, Rafa Vidal <[email protected]> escribió:
>
>> ...¿Y porqué no pruebas a sustituir el "<>" por un "=" y el "AND" por un
>> "OR"...?
>>
>> Un saludo,
>> Rafa Vidal
>>
>> Enviado desde mi Windows Phone
>> ------------------------------
>> De: Juan Ramón Garcia <[email protected]>
>> Enviado: ‎12/‎01/‎2016 17:35
>> Para: forum.help400 <[email protected]>
>> Asunto: Re: COBOL y SQL embebido IF dentro de WHERE
>>
>> Pues.... no funciona, en cuanto encuentra un elemento de W-HORA en blanco
>> ya no se cumple la condición AND y no selecciona el registro.
>>
>> Puffff, o me lo monto con PREPARE o un fichero temporal.
>> El problema es que yo no soy quien decido como hacerlo, tengo que
>> consultar a mi supervisor. Antes como yo era el Jefe lo hacía coo me daba
>> la gana :-)
>>
>> Un saludo.
>> Juanra
>>
>>
>>
>> El 12 de enero de 2016, 17:12, Juan Ramón Garcia <[email protected]>
>> escribió:
>>
>> Hola Javier:
>>
>> Pues compilar, compila, que ya es mucho :-)
>> Pues nada, voy a tirar por ese camino y ya os contaré
>>
>> Un saludo.
>> Juanra
>>
>>
>> El 12 de enero de 2016, 17:08, Juan Ramón Garcia <[email protected]>
>> escribió:
>>
>> Hola Javier:
>>
>> Pues no está nada mal, tiene pinta de funcionar y es sencillo de
>> implantar :-)
>>
>> De todas formas acabo de encontrar ejemplos de PREPARE y EXCUTE para
>> COBOL, por si a alguien le interesa:
>> http://www.craigsmullins.com/dbu_1004.htm
>>
>> Voy a probar lo tuyo, me resulta más cómodo y tengo que cambiar menos
>> cosas. Muchas gracias
>>
>> Un saludo.
>> Juanra
>>
>>
>> El 12 de enero de 2016, 17:01, Javier Mora <[email protected]> escribió:
>>
>> 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.
>>
>>
>>
>>
>>
>> ____________________________________________________
>> Ú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