-
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
-
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) ...
-
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.
-
 Zitat von ExAzubi
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
-
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.
-
... 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
-
Naja, manchmal auch nur aus Unkenntnis .
-
@Baldur: da ist meine Erfahrung eher umgekehrt, es wird aus Unkenntnis auf Null values verzichtet!
-
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
-
 Zitat von tarkusch
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
-
@Furchau: Danke, das VALUE eine IBM spez. Funktion wusste ich bislang gar nicht.
Werde dann aber demnächst coalesce einsetzen, wenn allg. Standard.
-
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
-
By rguenzel in forum NEWSboard Drucker
Antworten: 5
Letzter Beitrag: 18-01-07, 13:38
-
By stoerfang in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 28-11-06, 14:32
-
By Xanas in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 28-08-06, 12:21
-
By TARASIK in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-08-06, 10:09
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks