PDA

View Full Version : SQLRPGLE Embedded INSERT SQL, aber Dateien bleiben offen



itec01
10-07-17, 14:49
Hallo Zusammen,
Ich habe ein SQLRPGLE Programm welches 3 embedded Insert SQL Statements verarbeitet.
Nachdem alle 3 SQL's durchlaufen sind, sind die benutzen Dateien auch in den offenen Dateien zu sehen. Obwohl das Programm mit INLR beendet wird, bleiben die offenen Dateien so stehen.
Auszug aus dem PGM:
C/EXEC SQL
c+ INSERT INTO H7WRKP SELECT OPPTNO, OPDISP, OPRETP, 0, 0, OPPDCT,
c+ ' ', ' ', OPEFCC, OPEFYY, OPEFMM, OPEFDD, 0, 0 FROM opmstp
c+ WHERE OPPTNO = :PartNr and
c+ :DATECHK >= date(digits(opefcc) concat digits(opefyy) concat
c+ '-' concat digits(opefmm) concat '-' concat digits(opefdd))
C/END-EXEC

Verstehe nicht, wieso das so ist.
Danke.
Gruß Klaus

itec01
10-07-17, 15:05
Sorry, habe gerade den Beitrag gefunden.
Mit
<code><code>c/exec sql
c+ Set Option CloSqlCsr = *EndMod
c/end-exec

sollte es funktionieren.


</code></code>

Fuerchau
10-07-17, 15:52
Nicht unbedingt. Ein Insert-SQL benötigt keinen Cursor!
CloSqlCsr bezeichnet einen geöffenten Cursor, der automatisch geschlossen wird.
Dies hat nichts, aber auch gar nichts mit dem ODP (Open Data Path) zu tun, der durch SQL durchaus offen gehalten wird.
Allerdings merkt sich das System, ob der ODP durch SQL oder durch ein Programm-Open geöffnet ist.
Ein Programm-Open blockt die Datei gegen exklusiven Zugriff (z.B. ALCOBJ, ALTER TABLE), ein SQL-ODP wird ggf. bei Exclusiv-Sperre eines anderen Jobs freigegeben, wenn denn der ODP tatsächlich geschlossen werden kann.

itec01
10-07-17, 15:56
Habe es gerade ins Programm eingebaut und siehe da alle Dateien sind geschlossen.
Ich hatte es bei einem INSERT SQL auch nicht erwartet, aber nun wieder etwas dazu gelernt.