Hola a todos de nuevo: he realizado algunas pruebas para intentar comprender como funciona esto. Estoy en V5R4, ejecutando siempre los programas bajo el grupo de activación por defecto (*DFTACTGRP). El programa está compilado con CLOSQLCSR(*ENDACTGRP), es decir, se cierran "implicitamente" los cursores al finalar el grupo de activación. Por "implicitamente" yo entiendo cuando cierra el sistema el cursor si yo no lo indico "explicitamente" con un CLOSE. ¿Puedo estar equivocado? La prueba consisten en llamar reiteradamente al mismo programa que abre los cursores para ver como reacciona. La primera vez (después de una IPL) que se ejecuta el programa finaliza y quedan cerrados todos los cursores. Lo observo con DSPJOB y veo que no quedan vías de acceso abiertas. La segunda vez (sin cerrar el trabajo) deja abiertas las vías de acceso. si cierro el trabajo y vuelvo a ejecutar el programa, siguen quedándose los cursores abiertos. Si recompilo el programa con los mismos parámetros la secuencia de pasos anteriores vuelve a repetirse. La primera ejecución cierra vías y las siguientes las deja abiertas. No tengo muy claro como funciona SQL internamente pero llego a las siguientes conclusiones: - El programa cierra los cursores la primera vez que ejecuta el programa al encontral el CLOSE. - Si el programa se ejecuta varias veces el sistema lo recuerda y deja las vías de acceso abiertas para las siguientes llamadas. Me imagino que así mejora el rendimiento del equipo. - No sé si influye en algo el grupo de activación por defecto, pero al cerrar el trabajo el grupo se cierra. - Al recompilar el programa parace como que el sistema reconstruye "algo", no se el qué, pero actúa como si fuera la primera vez que se ejecutara el programa. Igual que al realizar una IPL. Si el programa lo compila con CLOSQLCSR(*ENDMOD) los cursores se cierran siempre que finaliza el programa. ¿Alguien puede aclarar alguna cosa más sobre este tema? ¿Estoy equivocado en algo? ¿Dónde puedo obtener información sobre el tema? He consultado el manual sobre programación con SQL incrustado y no veo nada a este respecto. Un saludo a t...@s. Javier
________________________________ De: [email protected] [mailto:[email protected]] En nombre de Angel Almeida Enviado el: lunes, 04 de enero de 2010 12:01 Para: 'forum.help400' Asunto: RE: Cerrar cursor explicitamente con CLOSE Hola y feliz año, No comentas si este programa es llamado desde otro ó lo ejecutas directamente, si lo ejecutas directamente debería utilizar tal y como te ha dicho Jaime *ENDMOD, si lo haces desde otro programa, tendrías que revisar las llamadas y la forma de utilizar los grupos de activación, es posible que no los estés utilizando adecuadamente Saludos, Angel Almeida. De: [email protected] [mailto:[email protected]] En nombre de Javier Mora Enviado el: lunes, 28 de diciembre de 2009 18:09 Para: forum.help400 Asunto: RE: Cerrar cursor explicitamente con CLOSE He hecho algunas pruebas y observo que en unas ocasiones si cierra todos los ficheros al hacer el CLOSE del cursor y en otras no, pero todavía no acabo de entender lo que ocurre. En mi caso el programa está compilado con COMMIT(*NONE) y CLOSQLCSR(*ENDACTGRP) ________________________________ De: [email protected] [mailto:[email protected]] En nombre de Jaime Villa Torres Enviado el: lunes, 28 de diciembre de 2009 16:39 Para: forum.help400 Asunto: Re: Cerrar cursor explicitamente con CLOSE Por lo general la compilacin de un sqlrpgle la realizo, con los siguientes valores Control de compromiso . . . . . COMMIT *NONE Cerrar cursor SQL . . . . . . . CLOSQLCSR *ENDMOD Prueba como te va.... ----- Original Message ----- From: Javier Mora <mailto:[email protected]> To: Forum AS/400 en castellano <mailto:[email protected]> Sent: Monday, December 28, 2009 6:14 AM Subject: Cerrar cursor explicitamente con CLOSE Feliz Navidad para t...@s: Tengo un programa que abre unos cuantos cursores y se cierran al terminar de usarlos con CLOSE nombreCursor. Pensaba que con esto era necesario, pero compruebo que los archivos utilizados para extraer la información siguen abiertos en el trabajo. ¿Qué estoy haciendo mal? ¿Es necesario indicar algo en la compilación? Por lo que leo, el parámetro CLOSQLCSR se reciere a un cierre implícito y entiendo que si hago un CLOSE en el programa le hará caso a éste. Un saludo y gracias por vuestros comentarios. Javier Mora García ________________________________ ____________________________________________________ © Publicaciones Help400, S.L. - Todos los derechos reservados http://www.help400.es ---------------------------------------------------- Para darte de baja visita la siguente URL: http://listas.combios.es/mailman/listinfo/forum.help400
____________________________________________________ © Publicaciones Help400, S.L. - Todos los derechos reservados http://www.help400.es ---------------------------------------------------- Para darte de baja visita la siguente URL: http://listas.combios.es/mailman/listinfo/forum.help400

