[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2017
    Beiträge
    12

    set transaction isolation level

    Hallo,

    ich versuche 2 Datenänderungen (inserts) mit einer Transaktion zu umgeben, damit entweder beide oder keine Änderung stattfindet.

    Aus der Doku werde ich nicht wirklich schlau.

    Grundsätzlich ist Commitment Control aus. Ich möchte es nur für diese Aktion verwenden.

    Da gibts doch bestimmt ein einfaches Beispiel. Meine Versuche endeten alle mit SQL-Fehlern.

    Ich stelle mir das so vor:
    exec sql set transaction isolation level ???;
    exec sql insert into ... ;
    exec sql insert into 2...;
    wenn fehler
    exec sql ROLLBACK;
    sonst
    exec sql COMMIT;

    Danke schon mal.

  2. #2
    Registriert seit
    Apr 2005
    Beiträge
    385
    1. Dafür sorgen das die Dateien/Tabellen auch wirklich journalisiert werden.
    2. Wenn Fehler schon hinter dem ersten Insert abfangen und zweites Insert nciht ausführen
    3. zweites Insert abfragen und auch COMIT/ROLLBACK

    So sollte es gehen.

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Es wäre schon mal interessant zu wissen, welche Fehler Du bekommst.

    Ansonsten sollte es wie folgt funktionieren.

    1. Beide Dateien im Journal registrieren.
    2. Programm mit Option COMMIT=*CHG umwandeln (oder besser ein SET OPTION-Statement mit COMMIT=*CHG vor dem 1. SQL-Statement in den QuellCode einfügen)
    3. Sicherheitshalber vor dem ersten INSERT ein COMMIT-Statement ausführen (damit nicht festgeschriebene Änderungen, festgeschrieben werden)
    4. Erstes Insert ausführen
    5. Wenn SQLCODE < *ZEROS --> ROLLBACK (Und Ende)
    6. Zweites Insert ausführen
    7. Wenn SQLCODE < *ZEROS --> ROLLBACK (Und Ende)
    8. COMMIT


    Etwa so:
    Code:
    Exec SQL  Set Option Commit=*CHG;
    
    Exec SQL  Commit;
    Exec SQL  Insert ....;
    If SQLCODE < *Zeros;
       Exec SQL Rollback;
       Return;
    EndIf;
    Exec SQL Insert ....;
    If SQLCODE < *Zeros;
       Exec SQL Rollback;
       Return;
    EndIf;
    Exec SQL Commit;
    Anmerkung: SET TRANSACTION ISOLATION ist nicht erforderlich. SQL startet Commitment Control automatisch, bei COMMIT<>*NONE und falls noch nicht gestartet.
    Wenn Du in RPG-Programmen nicht explizit COMMIT in den F-Bestimmungen angegeben hast und die sonstigen SQL-Programme mit INSERT/UPDATE/DELETE mit COMMIT=*NONE umgewandelt hast, passiert nichts, wenn die Commitment Steuerung gestartet bleibt.
    Du kannst natürlich auch nach Programm-Ende explizit den CL-Befehl ENDCMTCTL ausführen.


    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... ob set option besser ist, weiß ich nicht; ich würde in jedem Fall ein CRTSQLRPGI OBJTYPE(*MODULE) machen, da man die Sperrstufe dann auf module Ebene machen kann. Dieses Modul erstellt man dann mit commit level <> *NONE; dann läuft in diesem Modul alles mit commit, in allen anderen Module mit der Sperrstufe des jeweiligen Moduls.
    Zu Beginn macht man selbstredend kein "Angst-Commit", sondenr allenfalls ein Rollback, um unvollständige Transaktionen abzuräumen.
    Warum man noch F-Karten ablochen soll, wenn man embedded SQL kann, erschließt sich mir ebenfalls nicht und ENDCMTCTL würde ich ebenfalls bleiben lassen, das kann Probleme bei Folgeaufrufen geben.

    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/

Similar Threads

  1. security level auf 40 setzen
    By dibe in forum IBM i Hauptforum
    Antworten: 19
    Letzter Beitrag: 21-12-15, 23:48
  2. create tabel ohne level check
    By DEVJO in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 29-09-15, 15:07
  3. TECHNOLOGY REFRESH Level 8 - Ist IPL nötig zum Anlegen
    By coolie in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 10-10-14, 10:06
  4. Antworten: 3
    Letzter Beitrag: 07-08-14, 16:11

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •