Zitat Zitat von B.Hauser Beitrag anzeigen
Wir müssen zwischen impliziten und expliziten Schließen eines Cursors unterscheiden.

Das SQL Statement CLOSE schließt einen Cursor, lässt jedoch die ODPs (nach dem 2. Durchlauf) stehen, sofern diese wiederverwendbar sind.

Jedes SQL Statement erhält seinen eigenen ODP, auch dann, wenn das gleiche SQL Statement mehrfach in unterschiedlichen Subroutinen, Prozeduren oder Programmen codiert wurde.

Wann ein Cursor explizit geschlossen wird hängt von der Compile Option CLOSQLCSR ab. Der Default-Wert ist *ENDACTGRP, d.h. die ODPs werden erst dann gelöscht wenn die Aktivierungsgruppe beendet wird. Wird die Option *ENDMOD verwendet, wird der ODP gelöscht sobald das Modul, in dem das SQL-Statement hinterlegt wurde beendet wird. (Da eine volle Optimierung bzw. das Aufbauen der ODPs zeitaufwendig ist, ist aus Performance-Geschichtspunkten die erste Möglichkeit die bessere).

So wie es aussieht werden alle Programme in der Default-Activation-Group ausgeführt. Und die Default-Activation-Group kann nur durch das Beenden des Jobs beendet werden.

Die Anzahl der geöffneten bzw. offengehaltenen ODPs ist auch nicht unendlich, sondern soweit ich weiß per Default 512 pro Job. Ist dieses Maximum erreicht, so wird der älteste bzw. der am längsten nicht verwendete ODP gelöscht und durch den neuen ersetzt. In der QAQQINI (Abfrage Optionsdatei) gibt es Optionen, über die auf die Anzahl der ODPs pro Job Einfluss genommen werden kann.

Trotzallem bei "SQL-System Fehler" würde ich IBM einen Fehler melden.

Birgitta
Erstmal Danke an alle.

Da habe ich ja wieder eine interessante Diskussion losgetreten.

Zum Thema:
Die Programme werden mit CLOSQLCSR *ENDACTGRP kompiliert.

(Wird von mir verwendet, weil bei *ENDMOD und häufigen Calls auf SQLRPGLE eine Verschlechterung der Performance eintritt. )

Es gibt nur statische SQL. d.H. Declare/open/fetch/close,
keine dynam. (Prepare,declare,fetch...)
Und wenn der älteste bzw. der am längsten nicht verwendete ODP bei Maximum gelöscht wird, bleibt nur die Empfehlung von Birgitta: "SQL-System Fehler" an IBM melden ?

Gruß Joe