-
NULL und Case
Folgendes Phänomen:
Ich möchte eine Spalte (char, NULLABLE) einer SQL-Tabelle per SQL auf NULL setzen.
Egal ob embedded im RPG-Programm oder interaktiv, der Effekt ist der Gleiche:
Ein direktes updaten (update tabelle set spalte = NULL where ...) funktioniert.
Bau ich in das SQL-Statement einen CASE ein, funktioniert es nicht mehr:
Code:
update tabelle set spalte = (case when :hostvar > ' ' then :hostvar else NULL end) where ...
oder
Code:
update tabelle set spalte = NULLIF(:hostvar, ' ') where ...
In beiden Beispielen werden Leerzeichen statt NULL in die Spalte geschrieben.
Hat jemand eine Erklärung parat?
-
Ich schätze es liegt an den Wert in deiner Hostvariable.
Schreib mal lieber
Code:
case when :hostvar <> ' '
Folgendes liefert mir wie gewollt NULL:
Code:
select case when ' ' > ' ' then 'xx' else null end
from sysibm/sysdummy1
lg Andreas
-
Danke für die Antwort.
 Zitat von andreaspr@aon.at
... Schreib mal lieber
Code:
case when :hostvar <> ' '
...
Hat leider nichts gebracht.
Interaktiv in der SQL-Konsole ohne Hostvariable wird auch kein NULL geschrieben.
 Zitat von andreaspr@aon.at
Folgendes liefert mir wie gewollt NULL:
Code:
select case when ' ' > ' ' then 'xx' else null end
from sysibm/sysdummy1
Bei mir auch. Hilft mir aber leider auch nicht weiter.
Andere Ideen?
-
Ergänzend zur Erläuterung:
Interaktiv schreibt er hier Leerzeichen statt NULL:
Code:
update tabelle set Spalte = (case 1 when 1 then NULL else 'xx' end) where ...;
-
Für NULL-Werte benötigt man NULL-Anzeiger.
Diese dienen nicht nur zum Lesen sondern auch zum schreiben:
D MyVar 10
d MyVarNull 5I 0
if MyVar = *blank;
MyVarNull = -1; // NULL setzen
else;
MyVarNull = 0;
endif;
exec sql update mytable
set MyField = : MyVar : MyVarNull, MyField2 ...
where ...
...;
Zu beachten ist halt, dass für jede NULL-mögliche Spalte ein NULL-Anzeiger benötigt wird.
Ansonsten prüfe mal die Tabelle (DSPFFD) ob das Feld tatsächlich NULL erlaubt (ALLOWNULL).
-
NULL-Anzeiger brauche ich in dem Fall nicht, da ich den NULL-Wert nicht in der Hostvariable brauche.
-
Ich glaube das Problem ist in der Host-Variable zu finden.
Schreibe mal vor deinem Update
Und wenn dann immer noch nicht NULL steht, wäre der SQLSTATE interessant.
-
Bitte um Entschuldigung, aber NULL-Anzeiger werden zum korrekten Schreiben wirklich gebraucht.
Alle anderen Varianten kosten nur Zeit und sind nicht eindeutig zumal BLANK auch nicht NULL ist.
Deshalb ist der NULL-Anzeiger auch eine eigene Variable und muss im SQL auch separat angegebne werden.
Deine Hostvariable ist davon unberührt.
Spätesten wieder beim Lesen benötigst du sinnvollerweise wieder den NULL-Anzeiger, wenn du allerdings beim Select wieder coalesce verwendest kannst du dir das mit dem NULL-Wert auch schenken.
-
 Zitat von Fuerchau
Bitte um Entschuldigung, aber NULL-Anzeiger werden zum korrekten Schreiben wirklich gebraucht.
Alle anderen Varianten kosten nur Zeit und sind nicht eindeutig zumal BLANK auch nicht NULL ist.
Deshalb ist der NULL-Anzeiger auch eine eigene Variable und muss im SQL auch separat angegebne werden.
Deine Hostvariable ist davon unberührt.
Spätesten wieder beim Lesen benötigst du sinnvollerweise wieder den NULL-Anzeiger, wenn du allerdings beim Select wieder coalesce verwendest kannst du dir das mit dem NULL-Wert auch schenken.
Du merkst sicher, dass ich kein Freund von NULL-Anzeigern bin ;-). Bisher sind wir immer ohne ausgekommen. Beim Lesen verwenden wir coalesce.
-
 Zitat von andreaspr@aon.at
Ich glaube das Problem ist in der Host-Variable zu finden.
Schreibe mal vor deinem Update
Und wenn dann immer noch nicht NULL steht, wäre der SQLSTATE interessant.
Hat leider nichts gebracht.
Habe zwischenzeitlich die Hostvariable komplett rausgenommen:
Code:
exec sql update Tabelle
set Spalte =
(case
when 1=2
then 'xx'
else NULL
end)
where ...;
Schreibt auch kein NULL. sqlcod und sqlstate sind 0.
-
Woran siehst du, daß da Leerzeichen und nicht NULL reingeschrieben wurden?
-
 Zitat von Pikachu
Woran siehst du, daß da Leerzeichen und nicht NULL reingeschrieben wurden?
Bei NULL wird ein '-' angezeigt.
Similar Threads
-
By Tobse77 in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 24-09-09, 08:31
-
By Ewald in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 25-01-07, 07:52
-
By Flo4711 in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 29-09-06, 17:31
-
By deni87991 in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 04-08-06, 10:32
-
By klausgkv in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 08-06-06, 13:47
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