-
Transaktionssteuerung im RPG Programm
Hallo zusammen,
ich habe folgendes Problem mit dem ihr mir vielleicht helfen könntet:
Ich möchte eine einfach Transaktion durchführen und diese committen. Funktioniert auch alles wunderbar, nur zeigt mir der Transaktionsstatus nach dem commit noch eine offene Transaktion an. Ist das so korrekt? Wie bekomme ich es hin, dass die Transaktion mit dem commit oder rollback beendet ist?
Folgendes kleines Beispiel habe ich ausprobiert:
- Ich mache eine Transaktion auf mit
exec sql set transaction isolation level read uncommitted, read write;
- dann mache ich mein Insert/Update
- danach folgt im einfachen Test der Commit
Für eure Hilfe wäre ich sehr dankbar!
-
Zitat von shuelzer
Hallo zusammen,
ich habe folgendes Problem mit dem ihr mir vielleicht helfen könntet:
Ich möchte eine einfach Transaktion durchführen und diese committen. Funktioniert auch alles wunderbar, nur zeigt mir der Transaktionsstatus nach dem commit noch eine offene Transaktion an. Ist das so korrekt? Wie bekomme ich es hin, dass die Transaktion mit dem commit oder rollback beendet ist?
Folgendes kleines Beispiel habe ich ausprobiert:
- Ich mache eine Transaktion auf mit
exec sql set transaction isolation level read uncommitted, read write;
- dann mache ich mein Insert/Update
- danach folgt im einfachen Test der Commit
Für eure Hilfe wäre ich sehr dankbar!
... hast Du da einen wüsten Mix von SQL und RekordLöffelExzem? Wenn das alles per SQL erfolgt (exec scl insert/update... exec sql commit), dann sollte das funzen, oder einen SQL Fehler im SQLCOD zurück bringen. Letzteres passiert zum Beispiel, wenn irgendwelche Dilletanten dafür sorgen, dass die Tabellen nicht journalisiert werden, oder die Command defaults für die CRTSQLxxx Befehle verhunzt haben.
D*B
-
Es wird alles per SQL gemacht und die Lib ist journalisiert. Ein Rollback funktioniert auch, nur der Status ist eben noch 1 nach dem Rollback.
Welche Parameter muss ich denn bei dem CRTSQLRPGI beachten?
Commit steht auf *NONE.
-
Eigentlich sollte Commit=*CHG bei der Umwandlung (oder SET OPTION) angegeben werden.
exec sql set transaction isolation level read uncommitted, read write;
Ist unnötig (vor allem read uncommited)!
-
Ich Tippe darauf dass read uncommitted der Grund dafür sein könnte.
Ändere diesen und führe den Test nochmal aus.
lg Andreas
-
Zitat von shuelzer
Es wird alles per SQL gemacht und die Lib ist journalisiert. Ein Rollback funktioniert auch, nur der Status ist eben noch 1 nach dem Rollback.
Welche Parameter muss ich denn bei dem CRTSQLRPGI beachten?
Commit steht auf *NONE.
... was verstehst Du jetzt unter Status? Was zeigt WRKCMTDFN an?
D*B
-
Unter Status verstehe ich den "Status" der Transaktion, den ich mit get Diagnostics abfragen kann.
WRKCMTDFN zeigt eine offene Transaktion für den Job nach dem Commit.
-
Zitat von andreaspr@aon.at
Ich Tippe darauf dass read uncommitted der Grund dafür sein könnte.
Ändere diesen und führe den Test nochmal aus.
lg Andreas
Ich habe alle Isolationslevel ausprobiert mit dem gleichen Effekt.
Ich versteh es nicht!
-
Zitat von shuelzer
Unter Status verstehe ich den "Status" der Transaktion, den ich mit get Diagnostics abfragen kann.
WRKCMTDFN zeigt eine offene Transaktion für den Job nach dem Commit.
... was sagt denn der SQLCODE direkt nach jedem sql statement dem Commit? und wie sieht das bei WRKCMTDFN genau aus (dass da eine Commit Definition angezeigt wird ist so in Ordnung
D*B
-
Zitat von BenderD
... was sagt denn der SQLCODE direkt nach jedem sql statement dem Commit? und wie sieht das bei WRKCMTDFN genau aus (dass da eine Commit Definition angezeigt wird ist so in Ordnung
D*B
Ich weiss nicht genau welche Informationen Sie brauchen, aber der SQLCODE ist nach jedem Statement 0.
WKRCMTDFN zeigt eine neue Commit-Definition, ab dem Zeitpunkt des Ausführens von Set Isolation Level mit der Standardsperrstufe *CS.
Lokal anstehende Änderungen steht auf Nein vor dem Insert.
Nach dem Insert dann auf Ja und nach dem Commit wieder auf Nein. Die Commit-Definition bleibt bestehen.
Jetzt war die Idee, nach dem Commit oder Rollback mit Set Isolation no commit die Transaktion zu beenden. Funktioniert aber auch nicht.
Ein exec sql set option liefert ein SQL-Vorkompilierungsfehler.
Sry für die vielen Fragen. Wir sind noch neu in der Thematik Transaktionen auf System i und machen gerade unsere ersten Gehversuche.
-
Embedded SQL startet (wenn nicht vorher manuell aufgerufen) automatisch STRCMTCTL.
Damit wird für die Aktivierungsgruppe eine Commitdefinition erstellt.
Diese wird erst nach Ende des letzten SQL-Programmes bzw. der Aktivierungsgruppe gelöscht.
Der Hinweis "nach dem Commit wieder auf Nein" besagt doch, dass die Transaktion erfolgreich abgeschlossen ist.
Was stört dich also das Bestehen der Commit-Definition ?
-
Umso länger ich drüber nachdenke habe ich kein echtes Problem.
Man muss nur einmal wissen, wie die As400 da tickt.
Ich hatte eine Funktion geschrieben openSqlTransaktion() die eine neue Transaktion starten sollte. Diese Funktion sollte eine Exception werfen, wenn ich mich bereits in einer Transaktion befinde. Andere Funktionen, wie z.B. anlegenArtikel() sollten diese dann verwenden. Wenn aber ab dem ersten Aufruf immer eine geöffnet ist, muss ich immer abfragen ob schon eine offen ist und daran teilnehmen. Um das mal vereinfacht auszudrücken.
Danke für die Unterstützung
Similar Threads
-
By Josie314 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 24-07-12, 07:21
-
By mk in forum NEWSboard Java
Antworten: 8
Letzter Beitrag: 21-04-11, 21:51
-
By ExAzubi in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 13-07-06, 10:51
-
By PGMR in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 02-02-05, 13:10
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks