-
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
-
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.
-
Danke, hatte ein ähnliches Beispiel im Forum gefunden aber die falschen Schlüsse gezogen
-
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.
Similar Threads
-
By Sebastian85 in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 10-10-18, 11:45
-
By tarkusch in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 26-07-17, 09:12
-
By cicero22 in forum IBM i Hauptforum
Antworten: 12
Letzter Beitrag: 03-09-14, 18:45
-
By alexk2013 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 14-05-14, 12:33
-
By hs in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 31-01-14, 11:49
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