View Full Version : SQLCODE bei Verarbeitung mehrere SQL
holgerscherer
11-05-20, 17:38
Die meisten sind ja wohl schon im fortgeschritten Alter (hüstel..) und müßen nicht mehr mit dem Kopf durch die Wand.
Manchmal habe ich den Eindruck, ab einem gewissen Alter *ist* man die Wand :)
-h
Ist zwar schon etwas älter,
aber ich schieb den SQLcode nach der Operation evtl in eine neue Variable.
damit kann ich dann zb. einen zweiten Fetch innerhalb einer weiteren der Schleife machen und der zweite FETCH beendet nicht meine erste Schleife
dou sqlcod_1 <> 0;
fetch f1 into ....
sqlcode_1 = sqlcode
dou sqlcode_2 <> 0
fetch f2 into....
sqlcode_2 = sqlcode
.....
enddo
enddo
Mag nicht state of the art sein, aber meine Verfahren laufen so:
dow 1=1; // früher Do *hival
fetch ...
if sqlcode <> *zero;
leave;
endif;
// towas
if error;
iter;
endif;
enddo:
Vorteile:
- Bei Fehlern/nicht zuverarbeitenden Daten kann ich einfach an den Anfang springen.
- SQLCODE ist für die Schleifen nicht relevant.
So dann gebe ich auch noch meinen Senf zum Close cursor dazu.
Mein Close Cursor findet immer da statt wo ich ihn auch machen möchte und es logisch ist und zur Sicherheit noch vor dem OPEN CURSOR, in die PSSR und vor den *INLR.
Und ich bin auch schon daran verzweifelt als ich ein Programm geändert hatte warum das SQL immer noch nicht richtig funktioniert, dabei war der Cursor nicht geschlossen und er hat den bereits geöffneten verwendet. Deshalb auch die vielen CLOSE CURSOR.
Bei Option Close Cursor mit EndMod ist das ja unnötig.
Nun ja, wenn man modular programmiert;-).
Bei Option Close Cursor mit EndMod ist das ja unnötig.
Nun ja, wenn man modular programmiert;-).
... das ist unnötig! Weil natürlich auch der ODP mit dem *ENDMOD gelöscht wird!
... Und beim nächsten Durchlauf ein FULL OPEN gemacht wird, der 15-20% langsamer ist (weil der ODP wieder aufgebaut werden muss) als ein PSEUDO OPEN, bei dem nur die Daten in dem ODP aktualisiert werden.
... und gerade bei modularer Programmierung ist es gerade sinnvoll die ODPs nicht zu löschen! Die gleiche kann aus den Prozedur aus den unterschiedlichsten Programmen/Prozeduren aufgerufen werden.
Birgitta
Tja, ein ODP hat mit dem Cursor-Close aber auch gar nichts zu tun. Ein ODP bleibt ab einem 2. Open immer offen.