[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2003
    Beiträge
    195

    Question SQL Fehler bei Update über 2 Dateien

    Hallo allerseits,

    ich habe da wieder einmal ein Problem mit einem SQL-Statement und wende mich daher vertrauensvoll an euch.

    In der Datei TESTFGN/ARTSTP soll das Feld ARLINR mit dem Wert des Feldes LIRWA aus der Datei TESTFGN/ZLFA geändert werden, wenn die ARLINR dem Feld LIWHG der Datei TESTFGN/ZLFA entspricht.

    Folgendes Statement habe ich gezimmert:

    UPDATE TESTFGN/ARTSTP A
    SET ARLINR =
    (SELECT B.LIRWA FROM TESTFGN/ZLFA B WHERE B.LIWHG = A.ARLINR)

    Jetzt bekomme ich aber die Fehlermeldung:

    Nullwerte für Spalte oder Variable ARLINR nicht zulässig.

    Ich nehme mal an dass das auftritt wenn er keine Entsprechung in der Datei TESTFGN/ZLFA findet. Wie kann ich das umgehen?

    Danke schon mal für eure Rückmeldungen.

    LG
    Franz-Georg

  2. #2
    Registriert seit
    Apr 2003
    Beiträge
    195
    Kann es sein, dass das Statement wie folgt aussehen muss:

    update testfgn/artstp a set a.arlinr =
    coalesce((select b.lirwa from
    testfgn/zlfa b where
    a.arlinr = b.liwhg), 0)

    ???

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Die richtige Syntax für einen Update über 2 Dateien sieht wie folgt aus:
    Code:
    update Tabelle1 a                                       
       set a.UpdFld = (Select   b.UpdFldX                  
                             from  Tabelle2 b              
                             where a.Key1 = b.Key1 and a.Key2 = b.Key2 and ... a.KeyN = b.KeyN) 
       where Exists (Select * from Tabelle2 c              
                        Where a.Key1 = c.Key1 and a.Key2 = C.Key2 and ... a.KeyN = c.KeyN)
    Das ist die SQL Standard Syntax, ... auch wenn andere Datenbanken vereinfachte Update-Statements zulassen wird dies (zumindest vorerst) lt. Scott Forstie nicht in der Db2 for i implementiert.

    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
    Apr 2003
    Beiträge
    195
    Zitat Zitat von B.Hauser Beitrag anzeigen

    Das ist die SQL Standard Syntax, ... auch wenn andere Datenbanken vereinfachte Update-Statements zulassen wird dies (zumindest vorerst) lt. Scott Forstie nicht in der Db2 for i implementiert.

    Birgitta
    Danke Birgitta, aber ist eigentlich mein Statement auch richtig oder falsch?

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Im Prinzip Ja.
    Durch den Coalesce erzeugst du einen Default, so dass auf jeden Fall ein Update erzwungen wird.
    Von der Aufgabenstellung her kann das aber muss das nicht richtig sein.

    Die Where-Klausel des Updates macht in soweit Sinn, dass weniger Updates überhaupt durchgeführt werden, wenn der Ursprungswert erhalten bleiben muss.

    Alternativ kannst du auch dieses tun:

    update testfgn/artstp a set a.arlinr =
    coalesce((select b.lirwa from
    testfgn/zlfa b where
    a.arlinr = b.liwhg), a.arlinr)

    Damit bleibt der Wert auch erhalten, allerdings wird die gesamte Tabelle geändert!
    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.286
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Im Prinzip Ja.
    Durch den Coalesce erzeugst du einen Default, so dass auf jeden Fall ein Update erzwungen wird.
    Von der Aufgabenstellung her kann das aber muss das nicht richtig sein.
    ... besser als der coalesce wäre es (wie so oft) null values zuzulassen.

    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/

  7. #7
    Registriert seit
    Apr 2003
    Beiträge
    195
    @all

    danke für die Infos

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    @D*B: dann würde ich in solchen Fällen u.U. mehr Daten kaputtmachen (mit NULL überschreiben) als gewünscht.

    Bei Updates/Deletes sollte man qualifiziert über Where-Klauseln nachdenken;-).
    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. Antworten: 7
    Letzter Beitrag: 10-11-19, 15:00
  2. Windows Server 2008R2 64 und Client Access update Fehler
    By camouflage in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 15-04-14, 10:08
  3. Antworten: 9
    Letzter Beitrag: 10-04-14, 16:18
  4. Antworten: 2
    Letzter Beitrag: 08-08-02, 12:29
  5. DDM-Dateien über TCP/IP
    By Joshua in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-02-01, 15:23

Berechtigungen

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