[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Thema: SQL0811

Hybrid View

  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Ich weiß zwar nicht wo Du die Gerüchte gehört hast, bzw. wieso du glaubst, dass der ODP jedesmal gelöscht wird. Der ODP wird nur nach der 1. Ausführung gelöscht (wie auch bei den Cursorn) und bleibt nach der zweiten Ausführung offen (sofern er wiederverwendbar ist) und wird erst geschlossen, wenn die Activierungsgruppe beendet wird, zumindest wenn die Option CLOSQLCSR = *ENDACTGRP ist.
    Das meinte ich mit Gerücht
    Ich habe nämlich zuvor auch ein kleines Test-PGM gestartet, wo ich das gleiche Select INTO Statement 4 mal ausgeführt habe und jedes mal wurde der ODP neu erstellt wurde.

    Jetzt hab ich grad das gleiche Statement innerhalb einer Schleife 4 mal ausgeführt und plötzlich bleibt der ODP geöffnet.
    Außerhalb der Schleife scheint der ODP immer gelöscht zu werden. Warum auch immer!?!? (6.1)

    Weist du oder sonst wer eine vernünftige erklärung dafür??

    Ich habe (auch bei 5.4) jedenfalls erhebliche verbesserungen der Performance in diversen Programmen tätigen können indem ich einen Cursor verwendete, weil scheinbar nicht immer das Select Into Statement mit dem gleichen ODP verwendet wurde.

    Deshalb sag ich auch dass ein Cursor besser sei als ein Select Into, denn du kannst nie zu 100 % sagen, dass da der ODP offen bleibt, bei einem Cursor kann ich das schon. (Abhängig von den SET OPTIONs natürlich).

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Jetzt hab ich grad das gleiche Statement innerhalb einer Schleife 4 mal ausgeführt und plötzlich bleibt der ODP geöffnet.
    Außerhalb der Schleife scheint der ODP immer gelöscht zu werden. Warum auch immer!?!? (6.1)

    Weist du oder sonst wer eine vernünftige erklärung dafür??
    Während der Beiträge im anderen Thrad (Plan Cache und Monitor) denke ich die Antwort zu haben.

    Für jedes Select wird ja generell ein eigener Cursor erstellt. So wird auch für ganz genau dem gleichem Select an einer anderen Stelle im Programm ein eigener Cursor erstellt.
    Dadurch wird der ODP vom ersten Select nicht für das zweite verwendet auch wenn es 1:1 das gleiche ist.

    Das ist der Grund warum der ODP eines SELECT INTOs innerhalb einer Schleife öfters verwendet wird jedoch das gleiche Statement hintereinander nicht.
    Da die Statements hintereinander jedes einen eigenen Cursor hat.

    Somit konnte ich die Thematik SELECT INTO und ODPs auch nun durchblicken.
    Danke Birgitta für den Denkanstoß!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •