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.

