[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2021
    Beiträge
    2

    embedded SQL Cursor with Hold und Commit/Rollback

    Hallo zusammen,

    ich bräuchte mal etwas Fachexpertise zum Thema Commitsteuerung und RPGLE / SQLRPG.

    Ich habe ein steuerndes Programm und Commit=*CS mit Cursor with hold - Definitionen.
    Während dieser Cursor durchlaufen wird, wird ein zweites Programm aufgerufen, dass ebenfalls unter Commit = *CS . Solange das zweite Programm den Commit erfolgreich durchführen kann ist alles schöne und mein Cursor aus dem ersten Programm läuft weiter und arbeitet den nächsten Satz ab.
    Fällt das zweite Programm aber auf die Nase und ein Rollback wird ausgeführt, werden alle Cursor geschlossen - auch die aus dem steuernden Programm.
    Hab ich eine Möglichkeit das zu verhindern bzw. wie würde ich im steuernden Programm wieder auf meinen cursor an genau dieser Stelle zugreifen könne?

    Hier mal vereinfacht der Ablauf...

    PGM1
    ...
    Declare cursor c1 with hold
    Open c1
    If SQLCODE =0
    DOU ...
    fetch next c1
    If SQLCODE=0
    CALL PGM2
    EndIf
    ENDDO
    ...
    EndPGM

    vielen Dank für Eure Hilfe

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Aktivationgroup ist dein Freund.
    Pgm A sollte eine andere als Pgm B haben

    bei der Umwandlung kannst eine angeben und die Tragweite des Close auf diese Actgrp beschränken.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ja aber: Activation-Groups erstellen auch getrennte Transaktionen. Das aufgerufene Programm muss also seinen eigenen Commit/Rollback durchführen. Wenn es das nämlich vergisst, war alles für die Katz'.

    Allerdings musst du da etwas durcheinander bringen.
    Ein Cursor "with Hold" wird beim Rollback eben nicht zurückkgesetzt.

    https://www.google.com/search?client...rsor+with+hold
    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

  4. #4
    Registriert seit
    Jun 2021
    Beiträge
    2
    Danke für die Infos.
    Der Cursor "with hold" wird bei Rollback geschlossen und das ist mein Problem, da er offen bleiben muß für die weiteren Verarbeitungen.
    Wenn das nur mit getrennten Aktivierungsgruppen geht, haben wir in unserer Anwendung was zu tun, da wir immer dftactgrp(*no) actgrp(*caller) in den CTL-OPT implemetiert haben.
    Oder gibts da noch was anderes?

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Setz beim SQL Commit und Rollback WORK HOLD dahinter:

    Code:
    Exec SQL Commit Work Hold;
    oder versuch statt des SQL Commit und Rollback den RPG Commit und Rolbk zu verwenden

    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das mit der ACTGRP ist eh keine gute Idee. Man hat einen Commit Master, das ist der, der die Transaktion steuert und alle slaves sind *CALLER. Das HOLD beim Cursor wirkt nur beim Commit, beim Rollback muss zusätzlich nochmals hold angegeben werden. Das ist zwar kein ANSI, sondern DB2 Erweiterung, sollte aber funzen (sonst ist mit den PTFs was faul).

    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
    Feb 2001
    Beiträge
    20.241
    Nur mal ne blöde Frage:
    Bist du sicher, dass der Cursor in der Programmkette eindeutig ist?
    Wenn der selbe Cursorname wieder verwendet wird, scheitert der Open aber der Close nicht.
    Im Debugmodus solltes du da Hinweise finden können.
    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

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Ein Cursor-Name muss eindeutig innerhalb einer Quelle/Moduls sein! Außerhalb des Moduls kann der gleiche Cursor-Name wieder verwendet werden, unabhängig davon ob das Programm/Modul/Prozedur in der gleichen Programm-Kette aufgerufen wird.
    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

Similar Threads

  1. SQL Prozedur mit Cursor als Rückgabe (Embedded SQL)
    By harkne in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 16-06-20, 10:45
  2. Commit und Rollback bzw. nicht Rollback
    By wti in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 14-05-17, 13:13
  3. Embedded SQL Cursor updaten
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 23-10-16, 19:12
  4. OVRPRTF FILE(QPDSPSFA) HOLD(*YES)
    By Robi in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 26-02-14, 08:33
  5. COMMIT und ROLLBACK in RPG+SQL
    By Willi1 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 02-05-02, 22:54

Tags for this Thread

Berechtigungen

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