Y con sentencias preparadas? El 13 de enero de 2016, 4:26, Juan Ramón Garcia <[email protected]> escribió:
> 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. >
____________________________________________________ Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 © Publicaciones Help400, S.L.

