PDA

View Full Version : SQL0407



elsing
10-04-06, 15:07
Hallo Forum,
kann mir jemand zu o.g. SQL- Fehler helfen? Ich habe dieses Statement längere Zeit nicht benutzt. Heute wollte ich es ausführen und es funktioniert nicht mehr, bzw. es läuft nur bis zu einer bestimmten Stelle (ca. 20 Datensätze werden bearbeitet).
Hat jemand einen Tip?

Danke!

update c82f/iim set iwufi='INZ' where immand=11 and iwufi=' '
20 Zeilen in IIM in C82F aktualisiert.

update c82f/iim a set iwufi= (select iwufi from c82f/iim b where
a.iprod=b.iprod and a.immand<>b.immand and b.immand=1 and
a.immand=11
and a.i1sdb<>' ') where exists (select iwufi from
c82f/iim b where a.iprod=b.iprod and a.immand<>b.immand and
a.immand=11 and a.i1sdb<>' ')
Nullwerte für Spalte oder Variable IWUFI nicht zulässig.

Da ich vorher einen Wert in das Feld setze, wenn es *blank ist, kann es nicht leer sein.

dd3tj
10-04-06, 15:53
Hallo,

Vielleicht haben sie in der Datei einen Satz mit unglütige zeichen wäre ja vom ersten SQL nicht upgedatet worden am besten datei mit UPDDTA dies sagt ob datensatz ungültige zeichen behinhaltet

ich hoffe es hilft weiter

mfg

dd3tj

Thibaut Foucart

Fuerchau
10-04-06, 15:59
Ganz einfach:
Der Subselect des "Set" kommt zu einem anderen Ergebnis (nähmlich kein Satz) als die Where-Klausel.

elsing
10-04-06, 16:07
Hallo,
wenn ich den Subselekt einzeln ausführe, bekomme ich in beiden Fällen 271 Datensätze angezeigt.
Da ja auch ein update auf ein paar Datensätze erfolgt, kann die Ergebnisliste nicht leer sein.

=> dd3tj: Unzulässige Zeichen sind nicht drin.

Gruß
elsing

Fuerchau
10-04-06, 16:32
update c82f/iim a set iwufi=

(select iwufi from c82f/iim b where
a.iprod=b.iprod and a.immand<>b.immand and b.immand=1 and
a.immand=11 and a.i1sdb<>' ')

where exists (select iwufi from
c82f/iim b where a.iprod=b.iprod and a.immand<>b.immand and
a.immand=11 and a.i1sdb<>' ')

Der rote Select ermttelt KEINEN Satz, daher SQL0407.

BenderD
10-04-06, 17:18
Hallo,

' ' und null ist zweierlei und wenn ein subselect kein Ergebniis liefert, wird hier ebenfalls null zurück geliefert. Wenn ich das alles richtig lese, kann man den ersten Teil weglassen und gleich
update ...
set iwufi = (coalesce (select ...), 'INZ') where exists (select ...)
machen, das nimmt dem SQL Interpreter auch jede Möglichkeit in Vogelgrippe zu verfallen.

mfg

Dieter Bender


Hallo Forum,
kann mir jemand zu o.g. SQL- Fehler helfen? Ich habe dieses Statement längere Zeit nicht benutzt. Heute wollte ich es ausführen und es funktioniert nicht mehr, bzw. es läuft nur bis zu einer bestimmten Stelle (ca. 20 Datensätze werden bearbeitet).
Hat jemand einen Tip?

Danke!

update c82f/iim set iwufi='INZ' where immand=11 and iwufi=' '
20 Zeilen in IIM in C82F aktualisiert.

update c82f/iim a set iwufi= (select iwufi from c82f/iim b where
a.iprod=b.iprod and a.immand<>b.immand and b.immand=1 and
a.immand=11
and a.i1sdb<>' ') where exists (select iwufi from
c82f/iim b where a.iprod=b.iprod and a.immand<>b.immand and
a.immand=11 and a.i1sdb<>' ')
Nullwerte für Spalte oder Variable IWUFI nicht zulässig.

Da ich vorher einen Wert in das Feld setze, wenn es *blank ist, kann es nicht leer sein.

elsing
11-04-06, 13:30
Hallo,

ich habe die SQL-Abfrage jetzt ein wenig geändert, jetzt geht es.

update c82f/iim a set iwufi= (select iwufi from c82f/iim b where
a.iprod=b.iprod and a.immand<>b.immand and b.immand=1 and a.immand=11
and a.iwufi<>b.iwufi) where exists (select iwufi from
c82f/iim b where a.iprod=b.iprod and a.immand<>b.immand and
a.immand=11 and a.iwufi<>b.iwufi and b.immand=1)

Die Sache mit dem coalesce habe ich versucht, aber nicht ans laufen gekriegt.

Danke trotzdem!