[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2001
    Beiträge
    27

    Post SELECT..FOR UPDATE/Embedded SQL

    Hallo,
    ich bekomme einen Fehlermeldung, wenn ich in einem RPG-Programm ein "SELECT...FOR UPDATE" einbauen will. Das sei im embedded SQL nicht erlaubt??????!!!!
    Was habe ich denn dann für eine Möglichkeit genau diesen Satz zu sperren?
    Gruss und Danke
    KB

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    340

    Post

    Das wird über den COMMIT Parameter bei der Umwandlung gesteuert.

    Möglich ist auch eine dynamische Steuerung über

    Code:
    c/Exec SQL
    c+   SET OPTION COMMIT = 
    c/End-Exec
    und für ganz mutige gibt es (glaube ich) auch ein API

    Gruß Rolf

    [Dieser Beitrag wurde von rmittag am 24. Oktober 2001 editiert.]

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Post

    Hallo KB,

    ich hatte bisher noch nie Probleme mit embedded SQL und for update of Definition

    Anbei ein Beispiel, das sich sowohl mit commit = *CHG als auch *NONE umwandeln und anschliessend auch ausführen lässt:

    C/EXEC SQL
    C+ Declare $SQLC1 Cursor For
    C+ Select ATBMN
    C+ From HSATEIP
    C+ where FIRNR = :$$FINR
    C+ and ATBNR = 'HSWA_0514_001'
    C+ For Update of ATBMN, ATUSEU, ATPGMU
    C/END-EXEC
    *
    * SQL-Command Eröffnen
    *------------------------*
    C/EXEC SQL
    C+ open $SQLC1
    C/END-EXEC

    * Verarbeiten SQL-Command in einer Schleife
    *-------------------------------------------
    C Do *HIVAL
    *
    C/EXEC SQL
    C+ FETCH $SQLC1 INTO :$$BMN
    C/END-EXEC
    * Ende-Bedingungen
    C If SQLCOD = 100
    C Or SQLCOD< 0
    C Leave
    C Endif
    *
    * Verarbeitung
    C/EXEC SQL
    C+ Update HSATEIP
    C+ Set ATBMN = :$$BMN + 10,
    C+ ATUSEU = :§§USER,
    C+ ATPGMU = :§§PGM
    C+ Where Current of $SQLC1
    C/END-EXEC
    *
    C enddo
    *
    * SQL-Command Schliessen
    *------------------------*
    C/EXEC SQL
    C+ close $SQLC1
    C/END-EXEC


    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
    Apr 2012
    Beiträge
    360
    Hallo Frau Hauser,

    ist es auch möglich im Select-Statement mehrere Dateien anzugeben?
    Bekomme den Fehler SQL0511.

    Code:
    EXEC SQL
     DECLARE CUR_C1 CURSOR FOR
     SELECT T01.FIRMA, T01.PENR, T02.NAME
          , T03.FELD1, T03.FELD2, T03.FELD3, 
            T04.FELD1
     FROM   FILE01 T01
            INNER JOIN FILE04 T04
         ON T04.LND    = T01.LND
        AND T04.MONAT = T01.MONAT
        AND T04.FIRMA       = T01.FIRMA
        AND T04.PENR       = T01.PENR
            INNER JOIN FILE02 T02
         ON T02.IDP       = T01.IDP
        AND T02.LND    = T01.LND
        AND T02.MONAT = T01.MONAT
            INNER JOIN FILE03 T03
         ON T03.LND    = T01.LND
        AND T03.MONAT = T01.MONAT
        AND T03.FIRMA       = T01.FIRMA
        AND T03.PENR       = T01.PENR
     ORDER BY T01.LND , T01.FIRMA , T01.PENR
            , T01.MONAT
    FOR UPDATE OF Feld1, Feld2, Feld3
    lg

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Nein, ein Join kann nicht upgedated werden.
    Hier benötigst du einen Single-Select.
    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

  6. #6
    Registriert seit
    Apr 2012
    Beiträge
    360
    Oje, danke Vielmals für die rasche Antwort.

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das gilt mitlerweile auch nicht mehr unumschränkt. Wenn man das als View vernagelt, kann man auf selbige einen instead Trigger erstellen.

    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/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ja, aber nicht per "update of" mit Satzsperre.
    Das ist sowieso nicht SQL-Like. Frameworks generieren meist SQL's wie folgenden:

    update mytable
    set field = newvalue
    where tablekey = key and field = oldvalue ...

    Damit wird dann Konsistenz erreicht und ein "zerstörerischer" konkurierender Update verhindert.
    Wenn man dann nicht per "select * " alle Felder verarztet können durchaus viele Anwendungen mit verschiedenen Teilen eines Satzes Updates durchführen.

    Satzsperren verhindern doch konkurierendes Update?
    Dem ist im Transaktionsumfeld mitnichten so.
    Die (meisten) Frameworks arbeiten "offline". Es werden alle Informationen in interne Tabellen gelesen, dann werden diverse Änderungen gemacht (Ändern, Löschen, Hinzufügen) und anschließend der gesamte Update in einer Transaktion durchgeführt.
    Zwischen Lesen und Update kann also genug Zeit vergehen in der eine Information geändert wurde.
    Satzsperren gibt es da nicht.
    Bei Fehlern kann man per Filter die fehlerhaften Daten harausbekommen und ggf. Rollback durchführen ansonsten halt Commit. Damit sind Sperren dann alle aufgehoben.
    Nun kann man ja sagen, dass ich per Commitdefinition auch beim Lesen sperre, das funktioniert auch ohne Framework. Mit Framework wird die Verbindung aber durchaus getrennt somit sind Lese-Satzsperren nicht möglich.
    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

Similar Threads

  1. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  2. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  3. Satzanzahl Select (embedded SQL)
    By Schorsch in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-09-05, 15:22
  4. Offset für SQL - Select
    By Marc_w in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 30-03-05, 11:03
  5. SQL SELECT mit Endsumme ?
    By Schnichels in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-01-02, 13:45

Berechtigungen

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