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

Responder a