[NEWSboard IBMi Forum]

Thema: SQL not null

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.072

    SQL not null

    Hallo *all,

    ich habe hier zwei Dateien, dat013 mit 900 Einträgen und dat019 mit 600 Einträgen.

    Folgendes SQL

    Code:
    update dat013 t01 set preisl = (select prindex from dat019 t02    
           where  t01.debitor = t02.debitor                           
           and prindex is not null)
    Bekomme dann den Fehler

    Code:
    Nachricht . . . :   Nullwerte für Spalte oder Variable PREISL nicht zulässig.  
    Ursache  . . . . :  Einer der folgenden Fehler ist aufgetreten: Spalte PREISL  
      ist eine Zielspalte in einer Anweisung UPDATE oder INSERT für Tabelle DAT013 
      in RPTRADE. Es wurde ein Nullwert festgelegt, um in dieser Spalte eingefügt  
      oder aktualisiert zu werden, oder es wurde kein Wert für die Spalte in einer 
      Anweisung INSERT angegeben und für die Spalte sind keine Nullwerte zulässig. 
      Der Nullwert wurde mit der relativen Eintragsnummer  1 in der Liste VALUES,  
      SELECT oder in der SET-Klausel angegeben.
    Selbst wenn ich es so mache:
    Code:
    update dat013 t01 set preisl = (select prindex from dat019 t02  
           where  t01.debitor = t02.debitor                         
           and cast(prindex as dec(8)) > 0)
    klappt es nicht.

    Wo ist mein Denkfehler?
    Definiert ist das Feld mit PRINDEX CHARACTER (10) NOT NULL DEFAULT NOT HIDDEN.

    Beim datenimport hatte ich darauf geachtet keine NULL Werte zu haben.

    GG 4119

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Du hast keine Where-Klause für den Update selber.
    Hier solltest du einen

    where exists (select * from dat019 t03
    where t01.debitor = t03.debitor
    and cast(prindex as dec(8)) > 0)

    anhängen.
    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

  3. #3
    Registriert seit
    Aug 2006
    Beiträge
    2.072
    Danke, hatte ein ähnliches Beispiel im Forum gefunden aber die falschen Schlüsse gezogen

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Wenn der scalare Subselect kein Ergebnis findet, gibts NULL.
    Wenn den Zielfeld nun NULL erlaubt hätte, kannst du dir ja denken, was passiert wäre.

    Leider kann SQL ja nicht wissen, was du willst, deshalb gibts was auf die Finger.
    Man muss die Where-Klausel nun leider 2-Mal kodieren um eben keinen NULL-Wert zu erhalten.

    Alternativ wäre auch folgendes:

    update dat013 t01 set preisl = coalesce( (select prindex from dat019 t02
    where t01.debitor = t02.debitor
    and cast(prindex as dec(8)) > 0), preis1)

    wobei halt in diesem Fall mehr Sätze als nötig geändert werden. Dies kann ebenso Konsequenzen bei Triggern und sonstigen Constraints haben.
    Ganz zu schweigen von Satzsperren unter Transaktion.
    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. Verkettung mit NULL:0 in Free
    By Sebastian85 in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 10-10-18, 12:45
  2. Sql Null Werte
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-07-17, 10:12
  3. NULL Felder / CPYTOIMPF
    By cicero22 in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 03-09-14, 19:45
  4. UPDDTA und Null-Werte
    By alexk2013 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-05-14, 13:33
  5. SQL IS nOT NULL funktioniert nicht auf V7.1
    By hs in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 31-01-14, 12:49

Berechtigungen

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