[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

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

    Hallo,
    bekomme bei dieser Sqlabfrage die Meldung:Nullwerte für Spalte oder Variable nicht zulässig.
    Code:
    INSERT INTO QTEMP/$FILE (P1FIR, P1KST, P2ZLM, P2ADM, P2TKM, 
    P2LFD#) 
    SELECT XX.F1ABT, XX.F1KST, XX.ZUDAT, XX.ABDAT, XX.ZUTKM, 0
    AS Nummer FROM ZGNP XX WHERE NOT EXISTS( SELECT * FROM $FILE  
    YY WHERE XX.F1ABT= YY.P1FIR AND XX.F1KST = YY.P1KST) AND         
    (XX.ZUDAT <> 0 AND substr(digits(XX.ZUDAT), 1, 6) <= 201210 ) AND  
    substr(digits(XX.ABDAT), 1, 6) >= 201210 ORDER BY F1ABT, F1KST,    
    ZUDAT

    Das untere Statement mit dem Select wird korrekt angezeigt:
    Code:
    SELECT XX.F1ABT, XX.F1KST, XX.ZUDAT, XX.ABDAT, XX.ZUTKM, 0
    AS Nummer FROM ZGNP XX WHERE NOT EXISTS( SELECT * FROM $FILE  
    YY WHERE XX.F1ABT= YY.P1FIR AND XX.F1KST = YY.P1KST) AND         
    (XX.ZUDAT <> 0 AND substr(digits(XX.ZUDAT), 1, 6) <= 201210 ) AND  
    substr(digits(XX.ABDAT), 1, 6) >= 201210 ORDER BY F1ABT, F1KST,    
    ZUDAT
    Die Felder im Insert sind ident mit denen des Select.

    Wo liegt hier der Fehler begraben?

    Gruß

    Tarki

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Was man halt bei der Selectausgabe ggf. nicht sofort erkennen kann ist das Vorkommen von NULL.
    Dies wird in der Ausgabe dann durch " - " dargestellt.

    Per DSPFFD kannst du prüfen, ob auf einem der Quellfelder ALWNULL definiert ist, in diesem Fall gibt es 2 Möglichkeiren:

    - definiere in deiner Zieltabelle das feld ebenso als ALWNULL
    - mach einen select ... coalesce(Feld, Defaultkonstante) ...
    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
    Apr 2005
    Beiträge
    385
    Ggf. bei den Spalten der SELECT-Abfrage mit VALUE arbeiten. Das hat den Vorteil, das wenn eine Spalte NULL enthält, dieses einen sauberen Wert zurück gibt.

    SELECT VALUE(SPALTE1, 0) ....

    Enthält das Feld Spalte1 NULL wird die 0 zurückgegeben.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von ExAzubi Beitrag anzeigen
    Ggf. bei den Spalten der SELECT-Abfrage mit VALUE arbeiten. Das hat den Vorteil, das wenn eine Spalte NULL enthält, dieses einen sauberen Wert zurück gibt.

    SELECT VALUE(SPALTE1, "leer") ....

    Enthält das Feld Spalte1 NULL wird der String leer zurückgegeben.
    Worin glaubst Du liegt wohl der Unterschied zwischen COALESCE, IFNULL und VALUE???

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Beim Select den du im Insert verwendest.

    VALUE ist eine IBM-spezifische funktion die durch SQL-Standard dann als COALESCE definiert wurde.

    VALUE und COALESCE erlauben mehrere Werte, IFNULL erlaubt nur genau 2 Werte und ist auch erst durch eine spätere SQL-Norm dazugekommen.
    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
    ... das würde ich mal bleiben lassen, mit lockerer Hand die sauberen Nullvalues durch Schmuddelwerte, egal welcher Art zu ersetzen, da kann Quark bei rauskommen!!! Das hat ja vielleicht einen Grund, warum da Nullwerte zugelassen sind!!!

    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
    Feb 2001
    Beiträge
    20.696
    Naja, manchmal auch nur aus Unkenntnis .
    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
    @Baldur: da ist meine Erfahrung eher umgekehrt, es wird aus Unkenntnis auf Null values verzichtet!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Apr 2012
    Beiträge
    360
    Mensch, Mensch,

    ist ja mehr probieren als progamieren

    jetzt habe ich alle erdenklichen Varianten coalesce und Value ausprobiert, aber die Meldung ist immer die gleiche geblieben.

    Wenn ich das Select-Teil ausführe bekomme ich die Daten ganz normal und korrekt angezeigt.
    In den Felder sind keine Sonderzeichen enthalten, die irgendwie auf korrupte Daten hinweisen würden.

    Kann das vielleicht daran liegen das P1KST 4 0 ist und F1KST 3 0 ?

    Lustiger weise funktioniert das kopierte Statement im Ile-Pgm aber nicht in der Direkteingabe im Sql.

    Schätze das ich nächste Woche einen Work around machen muss.

    Gut Nacht

    Tarki

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von tarkusch Beitrag anzeigen
    Lustiger weise funktioniert das kopierte Statement im Ile-Pgm aber nicht in der Direkteingabe im Sql.
    Gleiche Bibliotheksliste?
    Gleicher Definition/Aufbau der Dateien in der QTEMP?
    Sind auch alle Spalten im INSERT-Statement angegeben, oder füllst Du nur einen Teil der Spalten?
    Die nicht angelisteten Spalten werden standardmäßig mit NULL-Werten oder sofern definiert mit dem Default-Wert gefüllt. Wenn diese Spalten nicht NULLfähig sind und kein Default-Wert angegeben ist bekommst Du hier ein Problem.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    Apr 2005
    Beiträge
    385
    @Furchau: Danke, das VALUE eine IBM spez. Funktion wusste ich bislang gar nicht.
    Werde dann aber demnächst coalesce einsetzen, wenn allg. Standard.

  12. #12
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenn du wirklich die Fehlermeldung mit nicht erlaubten NULL-Values erhaltest, dann ist der Fehler im folgenden Abschnitt:

    Code:
    SELECT XX.F1ABT, XX.F1KST, XX.ZUDAT, XX.ABDAT, XX.ZUTKM, 0
    AS Nummer FROM
    Diese angegebenen Spalten, dürfen keine NULL-Werte haben, wenn die Ziel-Tabelle, diese nicht unterstützen.

    Code:
    SELECT coalesce (XX.F1ABT, ' ') , coalesce (XX.F1KST, ' '), 
    coalesce (XX.ZUDAT, ' '), coalesce (XX.ABDAT, ' '), 
    coalesce (XX.ZUTKM, ' '), 0 AS Nummer FROM

Similar Threads

  1. Variable Ettiketenlänge
    By rguenzel in forum NEWSboard Drucker
    Antworten: 5
    Letzter Beitrag: 18-01-07, 13:38
  2. STRPCCMD mit einer Variable steuern
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-11-06, 14:32
  3. Variable Zahlenkonvertieren
    By Xanas in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 28-08-06, 12:21
  4. cl declare variable
    By TARASIK in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-08-06, 10:09
  5. String mit HexInhalt muss als Hex-Wert in Variable
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-05-06, 07:45

Berechtigungen

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