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.

