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

    SQL UPDATE und COMMIT im SQLRPGLE

    Hallo zusammen,

    ich brauche mal wieder Hilfe.

    Ich führe im SQLRPGLE SQL-updates auf Dateien aus.
    Wenn ich jetzt aber im RPG einen COMMIT mache, wandelt er mir das Programm nicht um weil er sagt es gibt keine Dateien die mit COMMIT definiert sind.

    Da es aber mehrere UPDATES sind möchte ich erst wenn alle UPDATES durch sind die mit COMMIT fest schreiben.

    Was muss ich machen?

    Viele Grüße harkne

  2. #2
    Registriert seit
    May 2004
    Beiträge
    444
    Hat sich erledigt, ich mach den COMMIT im aufrufenden CL.

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Warum verwendest Du nicht den SQL Commit?
    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
    May 2004
    Beiträge
    444
    Wird der SET OPTION COMMIT=*CHG bzw. SET OPTION COMMIT=*NONE bei der Umwandlung umgesetzt?
    Ich wollte das jetzt parameterabhängig machen, da der Compiler diese Anweisungen aussternt kann das ja nicht funktionieren.
    Habe ich eine andere Möglichkeit?

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... gibt es irgendeinen vernünftigen Grund updates per SQL ohne commit zu machen? Ich kenne keinen und etliche, dass SQL update ohne commit ein übler Kunstfehler ist.

    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/

  6. #6
    Registriert seit
    May 2004
    Beiträge
    444
    Naja jetzt komm aber. Ich mach doch einen COMMIT nur dann wenn ich sicher gehen will dass alles gemeinsam upgedated ist. Ich muss doch nicht für 10 Mio Sätze alles offen halten wenn es nicht wichtig ist ob er zwischendurch abbricht oder nicht.

    In dem Programm hier werden 1-x SQLs aufgerufen. Der der das Programm aufruft entscheidet ob er den COMMIT braucht oder nicht. Die SQLs die ausgeführt werden sind ohne Variablen und liegen in einer Tabelle. Da dieses dann von verschiedenen Programmen aufgerufen wird, wird dort entschieden ob es notwendig ist, das alle unter COMMIT laufen oder nicht.

    Ich persönlich verwende fast nie einen COMMIT, es sei denn ich brauche ihn wirklich wenn Abhängigkeiten vorhanden sind.

    Ich wollte jetzt eigentlich nur wissen ob es eine andere Möglichkeit gibt dies variabel zu gestalten.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nun ja, 10 Mio Locks gehen aber ganz schön auf die Performance.
    Das wird wohl kein Tagesjob sein sonderen eher am arbeitsberuhigtem WE.

    Übrigens: Transaktionen sind Konzepte die i.d.R. keine Millionen von Updates/Insert/Deletes umfassen.
    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
    Mar 2002
    Beiträge
    5.286
    ... commit ist nicht gedacht für Bulk updates von 10 Mio. Sätzen, über commit werden Satzsperren gesteuert, um Transaktionen abzusichern. Bedenken muss man, dass lesen und geändert fortschreiben auch schon eine Transaktion ist!
    Für Bulk updates ist es effektiver sich wiederaufsetzpunkte zu setzen, etwa per Timestamp oder Änderungssignaturen.

    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/

  9. #9
    Registriert seit
    May 2004
    Beiträge
    444
    Alles gut soweit. Gibt es eine Möglichkeit per Parameter im Programm zu sagen, die UPDATES laufen unter Commit-Steuerung oder sie laufen nicht unter Commit-Steuerung? Oder muss ich jetzt tatsächlich 2 verschiedene Programme aufrufen?

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ob die Updates unter Commit laufen, wird auf Modulebene per Compile-Option bestimmt.
    Wenn nicht *NONE angegebene ist, muss ein STRCMTCTL (macht RPG eigentlich automatsch) aufgesetzt werden.
    Wird *NONE definiert, wird jeder SQL implizit mit "with nc" ausgeführt, da du ja entschieden hast, an der Transaktion vorbei zu arbeiten.

    Da du SQL's je inzwischen auch per CLLE mit RUNSQL ausführen kannst, wäre dies auf dieser Ebene angebbar, da die Commitsteuerung dem Befehl mitgegeben wird.
    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

  11. #11
    Registriert seit
    May 2004
    Beiträge
    444
    Ich habe gerade was von Birgitta gelesen

    [COLOR=rgba(0, 0, 0, 0.87)]If you compile your program by specifying COMMIT *CHG all files that[/COLOR]
    [COLOR=rgba(0, 0, 0, 0.87)]are changed by SQL UPDATE, INSERT or DELETE statements must be[/COLOR]
    [COLOR=rgba(0, 0, 0, 0.87)]journaled.[/COLOR]
    [COLOR=rgba(0, 0, 0, 0.87)]If you have to manipulate data with SQL, but don't want or can[/COLOR]
    [COLOR=rgba(0, 0, 0, 0.87)]register the file in the journal, you can add WITH NC to the UPDATE,[/COLOR]
    [COLOR=rgba(0, 0, 0, 0.87)]INSERT or DELETE statement. If a ROLLBACK is performed these[/COLOR]
    [COLOR=rgba(0, 0, 0, 0.87)]statements are not rolled back.[/COLOR]
    Wenn ich das mit deinem (Fuerchau) vergleiche, dann könnte ich das lösen wenn ich *CHG angebe und WITH NC an die SQLs dran hänge wenn es ohne COMMIT laufen soll. Stimmt das so?

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von harkne Beitrag anzeigen
    Alles gut soweit. Gibt es eine Möglichkeit per Parameter im Programm zu sagen, die UPDATES laufen unter Commit-Steuerung oder sie laufen nicht unter Commit-Steuerung? Oder muss ich jetzt tatsächlich 2 verschiedene Programme aufrufen?
    ... das kann man im laufenden Programm mit set transaction isolation einstellen (zurücksetzen nicht vergessen). Als DB2 Erweiterung kann man bei jedem Statement eine isolation clause angeben. Die erste Variante ist näher am Standard. Gewandelt wird dann in jedem Fall mit commit, was ohnehin der Unterlassungswert ist und an dem man tunlichst nicht rumschrauben soll (was irgendwelche Dilettanten per chgcmddft gerne tun).

    D*Bl
    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. Commit im CL
    By mk in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 09-03-17, 14:09
  2. Commit ?
    By HEBORA in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 18-10-15, 21:00
  3. IFS und Commit
    By mk in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 23-02-15, 16:57
  4. COMMIT und ROLLBACK in RPG+SQL
    By Willi1 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 02-05-02, 23:54
  5. Commit Control
    By lorenzen in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 06-02-01, 11:03

Berechtigungen

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