Anmelden

View Full Version : JVAGATE offene Commits im Joblog



Seiten : 1 2 [3] 4 5

itec01
19-01-23, 13:15
Danke, dann sollte vermutlich auch der Commit/Rollback der AS/400 Tabelle mit SQL verarbeitet werden und nicht mit nativem RPG Chain, update, Commit oder wäre das egal? Wir würden gerne nicht mit SQL auf die AS/400 die commits machen.
Fehlermeldung beim open der AS/400 Tabelle:
CPF4326 Commitment Definition *N not valid for open of ASAP999P.

BenderD
19-01-23, 13:33
Danke, dann sollte vermutlich auch der Commit/Rollback der AS/400 Tabelle mit SQL verarbeitet werden und nicht mit nativem RPG Chain, update, Commit oder wäre das egal? Wir würden gerne nicht mit SQL auf die AS/400 die commits machen.
Fehlermeldung beim open der AS/400 Tabelle:
CPF4326 Commitment Definition *N not valid for open of ASAP999P.

... der commit sollte per sql erfolgen! Ob gerne oder nicht gerne, ich kann nur empfehlen das alles mit SQL zu machen. Mit dem Mix holt man sich nur Peobleme, die man nicht haben muss.

CPF4326 liegt daran, dass commit nicht gestartet ist. SQL erledigt das automatisch.

D*B

itec01
19-01-23, 13:38
OK, danke, dann auch den Insert und update auf die AS/400 per SQL?
wenn Commit/Rollback, dann 1 je Datenbank oder reicht einmal und alles ist gut?

BenderD
19-01-23, 13:44
OK, danke, dann auch den Insert und update auf die AS/400 per SQL?
wenn Commit/Rollback, dann 1 je Datenbank oder reicht einmal und alles ist gut?

... alles per sql! Einmal commit/rollback am Ende der Transaktion und gut ist!

D*B

itec01
19-01-23, 13:50
... alles per sql! Einmal commit/rollback am Ende der Transaktion und gut ist!

D*B
Dann aber mit SQL commit/rollback, richtig?

Fuerchau
19-01-23, 14:37
Das ist korrekt. Mit RPG Commit/Rollback klappt es nicht.
Ich verwende i.Ü. immer den exec SQL für commit/rollback.
Dann kommt man keinen Fehler von der RPG-Runtime.
Übrigens:
Auch bei reinen Lesevorgängen ist häufig bei fremden DB's ein Commit erforderlich, da hier gerne Autotransaction verwendet werden.

itec01
19-01-23, 15:43
@Baldur, vielen Dank, hat nun geklappt. Ein Commit / Rollback hat gereicht und beide Welten wurden schön zurückgefahren.
@Dieter, auch Dir vielen Dank, aber noch eine Frage:
In deinem Beispiel Programm verwendest Du *SQL als naming convention. Muss das so sein? Wir haben das Problem mit der Bibliotheksliste, weil die im CL zuvor dementsprechend nach test / live Umgebung gesetzt wird.
Bei *SQL greift diese Liste ja nicht und es wird stattdessen das Schema genommen, welches dem User entspricht.
Danke.
Klaus

Fuerchau
19-01-23, 16:40
Letzteres ist falsch, da man auch bei der Erstellung sowie zur Laufzeit die sog. Standardcollection setzen kann.
Da eine DB i.d.R. in einer Lib zu sein hat, andere nennen das Schema, gibts für dieses Argument eigentlich keine Begründung.
Da nun jede ACTGRP seine eigene SQL-Sitzung hat, kann eben jede ACTGRP auch sein eigenes Standardschema verwenden.
Bei Oracle z.B. kann ich mit *SYS gar keine Verbindung aufmachen bzw. auf irgendeine Tabelle zugreifen.

itec01
20-01-23, 06:59
Letzteres ist falsch, da man auch bei der Erstellung sowie zur Laufzeit die sog. Standardcollection setzen kann.
Da eine DB i.d.R. in einer Lib zu sein hat, andere nennen das Schema, gibts für dieses Argument eigentlich keine Begründung.
Da nun jede ACTGRP seine eigene SQL-Sitzung hat, kann eben jede ACTGRP auch sein eigenes Standardschema verwenden.
Bei Oracle z.B. kann ich mit *SYS gar keine Verbindung aufmachen bzw. auf irgendeine Tabelle zugreifen.

Guten Morgen,
wie geht man dann vor, damit die Tabelle gefunden wird, ohne die Bibliothek beim SQL Befehl angeben zu müssen? Wie gesagt im CL davor, wird die Libl festgelegt.
Danke.
Klaus

Fuerchau
20-01-23, 07:32
Per exec "sql set schema ..." wird die Defaultcollection für die ACTGRP gesetzt.
Dies kann natürlich auch in einem CLLE derselben ACTGRP vor Aufruf erfolgen.
CLP geht nicht, da die ACTGRP dann eine andere ist.
Alle unqualifizierten SQL's gehen dann auf dieses.
Bereits geöffenete Cursor sind davon nicht betroffen.