PDA

View Full Version : SQL Update aufgrund Werte einer 2. Datei



Seiten : [1] 2

FNeurieser
16-01-12, 08:17
Hallo, hätte da wieder mal eine Frage zu SQL an die Community, wobei ich mir nicht sicher bin ob dies so schon mal gestellt wurde. Ich konnte jedenfalls nichts dazu finden.

Hier also die Anforderung: Ich möchte in der Datei LGVDATEN/P1A im Feld P1ALIN ein „A“ bei allen Dienstnehmern einsetzen, die in der Datei ZEITDTA/P1A im Feld P1INS1 der Wert „ALL-IN“ aufweisen.
Ein eindeutiger Schlüssel kann über die Felder Firmennummer (P1FINR) und Personalnummer (P1PENR) hergestellt werden.

Könnte die Lösung so aussehen?:


Update LGVDATEN\P1 A SET A.P1ALIN = „A“
WHERE A.P1FINR CONCAT A.P1PENR in(Select B.P1FINR CONCAT B.P1PENR from ZEITDTA/P1A B where B.P1INS1 = „ALL-IN“)

Fuerchau
16-01-12, 08:40
Ja, du solltest besser

where exists (select * from ... where ...)

verwenden, da du hier die Schlüssel gezielt angeben kannst.

FNeurieser
16-01-12, 08:46
Hallo,

danke für die Info, aber wie müsste das Statement dann genau lauten?
Sorry für die Frage, aber mit "where exists" habe ich noch nie gearbeitet.

Sieht das dann vielleicht so aus?:


Update LGVDATEN\P1 A
SET A.P1ALIN = „A“ WHERE EXISTS(Select * from ZEITDTA/P1A B
where B.P1INS1 = „ALL-IN“ AND A.P1PENR = B.P1PENR AND A.P1FINR = B.P1FINR)

Fuerchau
16-01-12, 09:02
Da hast du voll ins schwarze getroffen :).

Pikachu
16-01-12, 09:12
Siehe auch hier:

SQL Update 2 gleiche Dateien (http://newsolutions.de/forum-systemi-as400-i5-iseries/newsboard-programmierung/17268-sql-update-2-gleiche-dateien.html)

FNeurieser
16-01-12, 09:17
Da hast du voll ins schwarze getroffen :).

Wow, danke Dir für Deine wie immer schnelle und konkrete Hilfe.

FNeurieser
16-01-12, 12:55
So, jetzt habe ich doch noch ein Problem aufgerissen:
Um dies zu testen wollte ich es nur bei meiner Personalnummer
ausprobieren, bekomme aber immer di efolgende Fehlermeldung:

"Spalte A nicht in angegebenen Tabellen."

Kann mir bitte jemand sagen was ich da falsch mache???
Hier nochmal das Statement:



Update LGVDATEN/P1A A SET A.P1ALIN = "A"
WHERE EXISTS
(Select * from ZEITDTA/P1A B
where B.P1INS1 = "ALL-IN" AND A.P1FINR = B.P1FINR
AND A.P1PENR = B.P1PENR)
AND A.P1PENR = 12345


müsste der Code nicht wie folgt lauten ?:


Update LGVDATEN/P1A A SET A.P1ALIN = 'A'
WHERE EXISTS
(Select * from ZEITDTA/P1A B
where B.P1INS1 = 'ALL-IN' AND A.P1FINR = B.P1FINR
AND A.P1PENR = B.P1PENR)
AND A.P1PENR = 12345

Fuerchau
16-01-12, 13:16
So genau habe ich mir deinen SQL nicht angesehen.
Aber du hast Recht:

- Textkonstanten in einfache Hochkomma
- Feldnamen in doppelte Hochkomme, wenn sie nicht Namenskonform sind (z.B. "Auftrags.Nr.")

FNeurieser
16-01-12, 14:31
Danke Dir nochmals recht herzlich für Deine Unterstützung.

LG
Franz-Georg

malzusrex
17-01-12, 07:45
So genau habe ich mir deinen SQL nicht angesehen.
Aber du hast Recht:

- Textkonstanten in einfache Hochkomma
- Feldnamen in doppelte Hochkomme, wenn sie nicht Namenskonform sind (z.B. "Auftrags.Nr.")

Man solle auch Feldnamen in Hochkomma setzen, die z.B. USER oder so heisen.
Mir es mal passiert, das ich im SQL aus einer Datei alle meine Sätze löschen wollte (Delete from MyFile where USER = 'ICH'). Am Ende waren alle Sätze aus der Datei raus, da er sich im SQL bei USER auf die Sitzung bezogen hat..

Gruß
Ronald