[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    satz nach sqlupdate noch gesperrt

    Moin,

    ich hab hier ein ILERPGPgm das mit SQL einen Satz liest, in diesem dann 2 Werte Updatet (auch sql) und ein (uraltes) Verarbeitungspgm ruft.
    Diese Verarbeitungspgm kann nun den eben upgedateten Satz nicht lesen.

    Commit steht auf *none

    Code:
         Satz 751795 in Teildatei myLogicalFile ist bereits für diesen Job gesperrt.
         E/A-Fehler CPF5032 in maLogicalFile erkannt (C G S D F).
    Code:
    eval sql_stm = select x, y from datei where ... for update
    DECLARE C1 SCROLL CURSOR FOR SE_FLD1     
    PREPARE SE_FLD1 FROM :SQL_Stm        
    fetch first from... into ...
    dow ...
    if ...
    Update datei set feld1 = :wert1, feld2 = :wert2 where current of c1
    call 'altpgm'
    Warum gibt SQL den Satz mit dem Update nicht frei bzw was muß ich machen, damit er frei wird ?

    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... 2 Möglichkeiten:
    - der erste update hat nicht geklappt, dann bleibt der Satz bis zum nächsten fetch dieses cursors gesperrt !!!
    - Software defect => PTF Bestellen

    am einfachsten ist dieses Geschäft immer mit Commit, dann gibt die Commit Operation die Sperren frei.

    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. #3
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Hallo Dieter,
    lt. Joblog hat der Update geklappt
    Commit kann ich nicht 'mal eben' einführen.
    Werde den Job mal so umbauen, das noch ein Fetch kommt
    Melde mich
    Gruß
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... das ist eines der größten Vorurteile, seit ILE geht das eben doch, sogar Programm für Programm, wenn man ein paar wenige Grundregeln beachtet.

    D*B

    Zitat Zitat von Robi Beitrag anzeigen
    Commit kann ich nicht 'mal eben' einführen.
    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. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Das Problem ist die Definition im Select ... for update !

    "for update" sperrt bereits beim Lesen, so dass anschließend beliebig viele "Update ... current of" durchgeführt werden können.
    Dadurch darf ja der Update den Satz eben nicht freigeben!

    Zu beachten ist auch, dass bei Satzsperre bereits der Select einen SQLCOD <> 0 liefert.

    Wenn du den "for update" wegläßt und den Update mit Schlüsseln ergänzt erfolgt die Sperre erst beim Update mit anschließender Freigabe (wenn ohne commit, ansonsten erst beim Commit/Rollback).

    Du solltest daher auch den SQLCOD nach dem Update prüfen bzw. die Anzahl der betroffenen Sätze.
    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
    Mar 2002
    Beiträge
    5.365
    ... die offizielle Doku sieht das anders

    http://publib.boulder.ibm.com/infoce...Frbafycncr.htm

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das Problem ist die Definition im Select ... for update !

    "for update" sperrt bereits beim Lesen, so dass anschließend beliebig viele "Update ... current of" durchgeführt werden können.
    Dadurch darf ja der Update den Satz eben nicht freigeben!

    Zu beachten ist auch, dass bei Satzsperre bereits der Select einen SQLCOD <> 0 liefert.

    Wenn du den "for update" wegläßt und den Update mit Schlüsseln ergänzt erfolgt die Sperre erst beim Update mit anschließender Freigabe (wenn ohne commit, ansonsten erst beim Commit/Rollback).

    Du solltest daher auch den SQLCOD nach dem Update prüfen bzw. die Anzahl der betroffenen Sätze.
    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.695
    When FOR UPDATE is used, FETCH operations referencing the cursor acquire an exclusive row lock.

    Bzgl. des Entsperrens nach "Update current of" kann ich nichts entdecken.
    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.365
    ... dann geh mal einen link tiefer (unter commit)
    http://publib.boulder.ibm.com/infoce...Frbafycncr.htm

    und da Tabelle 26

    Zitat Zitat von Fuerchau Beitrag anzeigen
    When FOR UPDATE is used, FETCH operations referencing the cursor acquire an exclusive row lock.

    Bzgl. des Entsperrens nach "Update current of" kann ich nichts entdecken.
    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. WDSC - Teildatei gesperrt
    By Allrounder in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 06-02-08, 13:48
  2. Satz löschen - ODBC
    By heini in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 27-06-06, 11:34
  3. Satz ändern in Subfile
    By Toschie in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 31-05-05, 11:37
  4. Datei ist gesperrt ?
    By sarge in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-12-04, 11:26
  5. ILE Cobol: Satz löschen aus Subfile
    By rebe in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-04-04, 09:29

Berechtigungen

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