... das geht ja wieder mal heftig durcheinander...
- wenn ich im Programm ein close statement absetze, ist das ein expliziter close!!!
- wenn ich im Programm kein close absetze und CLOSSQLCSR(*ENDMOD) gesetzt habe, schließt die runtime den Cursor implizit, das nennt man so, weil das verlassen des Modules den close beinhaltet!!!
- beide Operationen sind seit langem nur logische Operationen (Stichwort: lazy close), ob die Datenbank tatsächlich schließt (hard close), ist das Bier der Datenbank - könnte sich sogar mit dem nächsten PTF wieder ändern!!!
- Performance relevant ist das, wenn mit dem öffnen des ODPs ein Index erzeugt werden muss, weil kein passender da ist!!!
- Performance relevant ist das, wenn die Anwendung wg. fehlender logischer Close Operationen zu viele Cursor offen halten muss - dann steht sie nämlich!!!
- öffnen eines ODP ohne neuen Optimize (static SQL) und ohne Index Aufbau (passender vorhanden), dauert Millisekunden, Perfomance relevant ist das selbst in heftigen Fällen nicht, egal wie oft das noch behauptet wird!!!

D*B

Zitat Zitat von B.Hauser Beitrag anzeigen
Man muss zwischen implizitem Schließen (SQL Statement CLOSE) und explizitem Schließen (Löschen des ODPs) unterscheiden.

Ein ODP kann natürlich nur gelöscht werden wenn der Cursor implizit geschlossen wurde (das CLOSE-Statement) ausgeführt wurde.
Ein geöffneter Cursor ist noch in Verwendung und wird daher auch nicht (automatisch) gelöscht.

Birgitta