[NEWSboard IBMi Forum]
  1. #1
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005

    Reihenfolge der Datensatzverarbeitung beim SQL-Update

    Hallo,

    in welcher Reihenfolge werden beim SQL-Update die Datensätze verarbeitet? Geht es hier nach der relativen Satznummer?

    Ich habe folgenden Fall. Ich möchte in einer Tabelle die Satznummer aller Datensätze um 1 erhöhen mit folgendem SQL:

    update myfile set satznummer = satznummer + 1

    Die Satznummer ist Bestandteil des Unique-Key der Tabelle. Beim Aufruf erhalte ich den Fehler, dass versucht wird doppelte Sätze zu schreiben. Jetzt hab ich gesehen, dass der Datensatz mit der Satznummer 1 eine niedrigere relative Satznummer hat als der mit Satznummer 2. Und deshalb vermute ich jetzt mal, dass der Satz mit Satznummer 1 zuerst verarbeitet wird und deshalb der Fehler auftritt. Habe ich Recht mit meiner Vermutung?

    Gruß,
    KM

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Wenn's von der Feldgröße passt ...

    update datei set Satznr = Satznr + 'Anzahl Sätze der Datei'

    update datei set satznr = satznr + 1 - 'Anzahl Sätze der Datei'


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

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von KM Beitrag anzeigen
    Hallo,
    in welcher Reihenfolge werden beim SQL-Update die Datensätze verarbeitet? Geht es hier nach der relativen Satznummer?
    Die Antwort lautet an dieser Stelle ganz klar: "it depends"

    Wenn Du alle Datensätze in der Tabelle ändern willst, wir vermutlich ein TableScann erfolgen und die Daten in Eingangsfolge verarbeitet.
    Wenn Du jedoch WHERE-Bedingungn hast, kann es sein, dass auf die Daten am Schnellsten mit Hilfe eines Indices zugegriffen werden kann. In diesem Fall wird vermutlich ein Index Scan (oder Index Probe) erfolgen, bevor auf die Daten zugegriffen wird (Table Probe)
    ... und dann ist auch nicht sicher, dass die Daten in der Reihenfolge verarbeitet werde, in der Du sie gerne verarbeitet hättest.

    Um die Satz-Nr. zu verändern, kannst Du wie Robi vorgeschlagen hat 2 Updates machen.
    1. Du addierst die Anzahl der Datensätze zu der Satz-Nr. hinzu
    2. Im zweiten Durchlauf subtrahierst du die Anzahl der Datensätze wieder und addiiert 1 dazu.

    Wenn nur ein laufender Zähler gebildet werden, soll, die Reihenfolge in der die Nr. vergeben wird, jedoch egal ist, kannst Du mit einem SEQUENCE-Object arbeiten.
    Code:
    z.B. Update ...
             Set Nr = NEXT VALUE FOR SequenceName
             ...
    Ansonsten bleibt Dir nur die Einzel-Satz-Verarbeitung, also CURSOR mit entsprechendem ORDER BY (Absteigende Reihnfolge, damit es keine doppelten Schlüssel gibt) im Select-Statement und dann den Update über WHERE CURRENT OF Cursor.

    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

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von KM Beitrag anzeigen
    Hallo,

    in welcher Reihenfolge werden beim SQL-Update die Datensätze verarbeitet? Geht es hier nach der relativen Satznummer?

    Ich habe folgenden Fall. Ich möchte in einer Tabelle die Satznummer aller Datensätze um 1 erhöhen mit folgendem SQL:

    update myfile set satznummer = satznummer + 1

    Die Satznummer ist Bestandteil des Unique-Key der Tabelle. Beim Aufruf erhalte ich den Fehler, dass versucht wird doppelte Sätze zu schreiben. Jetzt hab ich gesehen, dass der Datensatz mit der Satznummer 1 eine niedrigere relative Satznummer hat als der mit Satznummer 2. Und deshalb vermute ich jetzt mal, dass der Satz mit Satznummer 1 zuerst verarbeitet wird und deshalb der Fehler auftritt. Habe ich Recht mit meiner Vermutung?

    Gruß,
    KM
    Die Reihenfolge kannst Du bei einem Bulk nicht beeinflussen - wie wärs mit CHGPFCST constraint disable, dann Dein bulk statement dann wieder chgpfcst.

    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. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    @Alle: Danke für die Antworten!

    @BenderD: Bei der Tabelle ist gar kein Constraint hinterlegt.

    Gruß,
    KM

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... wo kommt dann der doppelte Schlüssel her?
    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
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    ... wo kommt dann der doppelte Schlüssel her?
    Da liegt jetzt vielleicht ein Missverständnis vor. Das Feld "Satznummer" gehört zu den Key-Feldern der Tabelle und diese wurde mit dem DDS-Schlüsselwort "UNIQUE" erstellt. Es gibt aber keine Constraints, die jetzt explizit mit ADDPFCST hinzugefügt wurden. Mit WRKPFCST werden zu dieser Tabelle auch keine angezeigt.

    Gruß,
    KM

  8. #8
    Registriert seit
    Oct 2013
    Beiträge
    171
    Wenn Dir die relative Satznummer bei Deinen Manipulationen hilft, die gibt es mit RRN(*) bzw. RRN(Tabellenbezeichner).

  9. #9
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Wenn Dir die relative Satznummer bei Deinen Manipulationen hilft, die gibt es mit RRN(*) bzw. RRN(Tabellenbezeichner).
    Das ist mir bekannt. Aber die hilft mir ja beim Update hier nicht.

    Gruß,
    KM

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wenn der Key bereits in der PF liegt (per DDS), kann man den leider nicht deaktivieren.
    Ist der Key in einer LF kann man diese löschen und nach dem Update neu erstellen.
    Ansonsten hast du ja die Möglichkeiten mit dem doppelten Update.
    Wenn du des Rechnens müde bist, geht das auch so:

    1. Update mit SatzNr = 0 - SatzNr
    2. Update mit SatzNr = 0 - SatzNr + 1
    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. Cursor-Reihenfolge in Subdateien mit SFLLIN
    By fpxx in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 26-07-17, 14:38
  2. Datensatzfortschreibung in falscher Reihenfolge
    By M.Heger in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 16-09-16, 09:43
  3. Reihenfolge Abarbeitung JOBQ
    By Starocotes in forum IBM i Hauptforum
    Antworten: 23
    Letzter Beitrag: 19-05-15, 13:04
  4. SQL und Reihenfolge der angezeigten Sätze
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 30-12-14, 19:53
  5. Fehler beim GET im FTP
    By malzusrex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 23-04-03, 17:15

Berechtigungen

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