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.
Bookmarks