[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2013
    Beiträge
    9

    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!

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    Zitat Zitat von shuelzer Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    May 2013
    Beiträge
    9
    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.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.259
    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)!
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich Tippe darauf dass read uncommitted der Grund dafür sein könnte.
    Ändere diesen und führe den Test nochmal aus.
    lg Andreas

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    Zitat Zitat von shuelzer Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    May 2013
    Beiträge
    9
    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.

  8. #8
    Registriert seit
    May 2013
    Beiträge
    9
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    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!

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    Zitat Zitat von shuelzer Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    May 2013
    Beiträge
    9
    Zitat Zitat von BenderD Beitrag anzeigen
    ... 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.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.259
    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 ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    May 2013
    Beiträge
    9
    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

  1. AS400 CL / RPG - ftp Programm
    By Josie314 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 24-07-12, 07:21
  2. Rückgabewert vom RPG Programm
    By mk in forum NEWSboard Java
    Antworten: 8
    Letzter Beitrag: 21-04-11, 21:51
  3. MI Source aus einem RPG Programm erstellen
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 13-07-06, 10:51
  4. Java Programm aus ILE RPG aufrufen
    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
  •