-
SQL Fehler bei Update über 2 Dateien
Hallo allerseits,
ich habe da wieder einmal ein Problem mit einem SQL-Statement und wende mich daher vertrauensvoll an euch.
In der Datei TESTFGN/ARTSTP soll das Feld ARLINR mit dem Wert des Feldes LIRWA aus der Datei TESTFGN/ZLFA geändert werden, wenn die ARLINR dem Feld LIWHG der Datei TESTFGN/ZLFA entspricht.
Folgendes Statement habe ich gezimmert:
UPDATE TESTFGN/ARTSTP A
SET ARLINR =
(SELECT B.LIRWA FROM TESTFGN/ZLFA B WHERE B.LIWHG = A.ARLINR)
Jetzt bekomme ich aber die Fehlermeldung:
Nullwerte für Spalte oder Variable ARLINR nicht zulässig.
Ich nehme mal an dass das auftritt wenn er keine Entsprechung in der Datei TESTFGN/ZLFA findet. Wie kann ich das umgehen?
Danke schon mal für eure Rückmeldungen.
LG
Franz-Georg
-
Kann es sein, dass das Statement wie folgt aussehen muss:
update testfgn/artstp a set a.arlinr =
coalesce((select b.lirwa from
testfgn/zlfa b where
a.arlinr = b.liwhg), 0)
???
-
Die richtige Syntax für einen Update über 2 Dateien sieht wie folgt aus:
Code:
update Tabelle1 a
set a.UpdFld = (Select b.UpdFldX
from Tabelle2 b
where a.Key1 = b.Key1 and a.Key2 = b.Key2 and ... a.KeyN = b.KeyN)
where Exists (Select * from Tabelle2 c
Where a.Key1 = c.Key1 and a.Key2 = C.Key2 and ... a.KeyN = c.KeyN)
Das ist die SQL Standard Syntax, ... auch wenn andere Datenbanken vereinfachte Update-Statements zulassen wird dies (zumindest vorerst) lt. Scott Forstie nicht in der Db2 for i implementiert.
Birgitta
-
Zitat von B.Hauser
Das ist die SQL Standard Syntax, ... auch wenn andere Datenbanken vereinfachte Update-Statements zulassen wird dies (zumindest vorerst) lt. Scott Forstie nicht in der Db2 for i implementiert.
Birgitta
Danke Birgitta, aber ist eigentlich mein Statement auch richtig oder falsch?
-
Im Prinzip Ja.
Durch den Coalesce erzeugst du einen Default, so dass auf jeden Fall ein Update erzwungen wird.
Von der Aufgabenstellung her kann das aber muss das nicht richtig sein.
Die Where-Klausel des Updates macht in soweit Sinn, dass weniger Updates überhaupt durchgeführt werden, wenn der Ursprungswert erhalten bleiben muss.
Alternativ kannst du auch dieses tun:
update testfgn/artstp a set a.arlinr =
coalesce((select b.lirwa from
testfgn/zlfa b where
a.arlinr = b.liwhg), a.arlinr)
Damit bleibt der Wert auch erhalten, allerdings wird die gesamte Tabelle geändert!
-
Zitat von Fuerchau
Im Prinzip Ja.
Durch den Coalesce erzeugst du einen Default, so dass auf jeden Fall ein Update erzwungen wird.
Von der Aufgabenstellung her kann das aber muss das nicht richtig sein.
... besser als der coalesce wäre es (wie so oft) null values zuzulassen.
D*B
-
-
@D*B: dann würde ich in solchen Fällen u.U. mehr Daten kaputtmachen (mit NULL überschreiben) als gewünscht.
Bei Updates/Deletes sollte man qualifiziert über Where-Klauseln nachdenken;-).
Similar Threads
-
By Arnie in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 10-11-19, 14:00
-
By camouflage in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 15-04-14, 09:08
-
By svente in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 10-04-14, 15:18
-
By Biene in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 08-08-02, 11:29
-
By Joshua in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 12-02-01, 14:23
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