[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    Registriert seit
    May 2004
    Beiträge
    444
    @Bender Das mit set transaction isolation habe ich gefunden aber nicht verstanden. Heißt das ich mache dann abhängig von meinem Parameter entweder einen SET TRANSACTION ISOLATION LEVEL NO COMMIT den anderen brauche ich ja nicht da ja das automatisch so ist wenn es richtig umgewandelt ist und nachdem meine SQLs durch sind mache ich einen SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ?

  2. #14
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... dabei muss man sicher sein, das man an einer commit Grenze ist. Aber für deinen Bulk update (wenn es denn einer ist) ist das kein gutes Design.

    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. #15
    Registriert seit
    May 2004
    Beiträge
    444
    Was verstehst Du unter BULK-update. Mehrer Sätze? mehrere 1000 Sätze, mehrere Millionen Sätze. Grundsätzlich ist das egal, denn jeder der das Programm verwendet muss wissen was er macht. Deshalb kann er ja sagen mit oder ohne COMMIT. Und was ihr mit Eurer Commit-Grenze meint bin ich mir auch nicht sicher. Was soll das sein? Das ich keinen ENDCMTCTL mache wenn ich noch offene COMMITs habe? oder das ich erst einen COMMIT ausführe wenn ich den Soll und den Haben-Satz geschrieben habe. An dieser Stelle geht es einfach darum, dass wir UPDATES in einer Tabelle ablegen können die nacheinander ausgeführt werden. Die Tabelle hat einen Schlüssel Wenn jetzt jemand das Programm aufruft mit Schlüssel KEY1, werden alle SQLs ausgeführt die unter dem Schlüssel KEY1 augeführt sind. z.B. KEY1 UPDATE DATEI SET STATUS = 'X' WHERE PARTGROUP = 'Y' und dann noch KEY1 UPDATE DATEI SET STATUS = 'V' WHERE PARTGROUP = 'A'. Jetzt entscheidet der der das Programm aufruft ob es ein Problem ist wenn SQL1 ausgeführt wird und SQL2 abbricht. Wenn das kein Problem ist, braucht er meiner Ansicht nach auch keine Commit-Steuerung. Das kann aber nicht ich entscheiden, sondern muss der entscheiden der die SQLs in der Tabelle anlegt und aus seinem Programm aus dann das Programm hier aufruft mit Schlüsselwert um die SQLs auszuführen. Wie gesagt, ich versuche die COMMIT-Steuerung schon immer zu vermeiden wenn ich sie nicht brauche. Und da unterscheide ich nicht zwischen BULK oder gutem Stil oder sonst was. Brauche ich die COMMIT-Steuerung Ja oder Nein. Und es gibt oft die Antwort NEIN.

  4. #16
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    @Bulk update: genau das was ihr hier macht, ist ein typischer Bulk update!Unter commit werden hier alle geänderten Sätze gesperrt, da sind Abbrüche geradezu vorprogrammiert und deadlock Situationen vorprogrammiert.

    @Commit Grenze: Unter commit beginnt eine Transaktion mit der ersten Sperre und endet mit dem commit/rollback. Innerhalb der Transaktion sind bestimmte Operationen für den Job nicht durchführbar: ENDCMTCTL, set transaction, disconnect, die gehen nur an einer commit Grenze := außerhalb einer Transaktion.

    @commit nein: ohne commit kann z.B. zwischen einem select into und nachfolgendem update von anderen Jobs der Inhalt verändert werden. Commit Steuerung aus Unkenntnis zu vermeiden erzeugt Fehlersituationen, die Daten beschädigen können. Alles was mehr als einen Satz verändert (Umbuchungen, Fortschreibung von Summen etc. (und was tut das nicht) gehört in Transaktionen mit commit geklammert - alles andere ist Murks oder viel komplizierter zu programmieren.

    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/

  5. #17
    Registriert seit
    May 2004
    Beiträge
    444
    Ich habe jetzt an die SQL-Statements WITH NC ran gemacht wenn keine Commit-Steuerung nötig ist, das ist übersichtlich und funktioniert.

    Also für alle die es interssiert

    CL hat STRCMTCTL
    RPG hat
    SET OPTION COMMIT=*CHG
    Wenn kein Commit erforderlich ist hänge ich an die SQL-Statements WITH NC dran.
    Im CL mache ich dann den COMMIT bei gewünschter Commit-Steuerung
    Hinter dem Call ans RPG noch MONMSG und ROLLBACK bei gewünschter Commit-Steuerung
    Am Ende wenn das Programm den STRCMTCTL ausgeführt hat macht er auch den ENDCMTCTL

  6. #18
    Registriert seit
    May 2004
    Beiträge
    444
    @Bender

    BULK updates auf mehrer Sätze erfolgen bei uns dann im Nachtablauf. Hier ist der COMMIT nur notwendig wenn alles gemeinsam updgedated sein muss. Sperren sind hier egal, die werden nicht auftreten, weil während des Tagesendjob keine anderen Prozesse laufen

    Kleiner Updates eventuell im Laufe des Tages, dann reden wir aber von ein paar Sätzen UND DESHALB BRAUCHE ICH DAS PROGRAMM VARIABLE MIT UND OHNE COMMIT

    Und ich habe auch bereits erwähnt. Wenn ich mehrere zusammenhängende Updates brauche dann weiß ich ja im Programm das ich das brauche und mache das ganze MIT COMMIT. Wenn ich keine zusammenhängende Dateien habe mache ich das OHNE COMMIT seit 1987 mit dem VERSTÄNDNIS und OHNE SQL wann ich Sperren oder gemeinsame Updates brauche oder nicht.

    in diesem Programm weiß ich es nicht, sondern nur der, der die SQLs in der Tabelle anelegt und anschließend das Programm verwendet.


    VIELEN DANK FÜR ALLE INFORMATIONEN. Bin ich immer sehr dankbar darum.

    Viele Grüße harkne

  7. #19
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Das WITH NC ist aber nur dynamisch wenn die SQL's prepared werden und per Execute laufen.
    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. #20
    Registriert seit
    May 2004
    Beiträge
    444
    @Fuerchau,
    OK, danke für die Info, bei mir hat es funktioniert.
    Bei mir sieht es so aus. Wobei w@SQL zuvor aus meiner Datei gefüllt wird

    PHP-Code:
    0154.00 **                                                                  
    0155.00 c                   if        w@Sql <> *blanks                      
    0156.00 c                   
    if        Pi@Commit '0'                       
    0157.00 c                   eval      w@Sql = %trim(w@Sql) + ' WITH NC'     
    0158.00 c                   endif                                           
    0159.00 c/exec sql                                                          
    0160.00 c
    EXECUTE IMMEDIATE :w@SQL                                         
    0161.00 c
    /end-exec                                                          
    0162.00 
    **                                                                  
    0163.00 c                   endif 

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
  •