Casting vom Typ NULL beim Aktualisieren mehrerer Zeilen
Ich habe ein Problem, wenn ich versuche, viele Zeilen gleichzeitig zu aktualisieren.
Hier ist die Tabelle und Abfrage, die ich verwende (zum besseren Lesen vereinfacht):
Tabelle
CREATE TABLE foo
(
pkid integer,
x integer,
y integer
)
Abfrage
UPDATE foo SET x=t.x, y=t.y FROM
(VALUES (50, 50, 1),
(100, 120, 2))
AS t(x, y, pkid) WHERE foo.pkid=t.pkid
Diese Abfrage funktioniert einwandfrei, aber wenn ich versuche, eine Abfrage auszuführen, wo allex odery Werte sind null, ich erhalte eine Fehlermeldung:
Abfrage mit Nullen
UPDATE foo SET x=t.x, y=t.y FROM
(VALUES (null, 20, 1),
(null, 50, 2))
AS t(x, y, pkid) WHERE foo.pkid=t.pkid
Error
ERROR: column "x" is of type integer but expression is of type text
LINE 1: UPDATE foo SET x=t.x FROM
Die einzige Möglichkeit, dies zu beheben, besteht darin, mindestens einen der Werte zu ändern(null, 20, 1)
zu(null:int, 50, 2)
Aber ich kann das nicht tun, da ich eine Funktion habe, die diese Abfrage "Mehrere Zeilen aktualisieren" generiert und nichts über die Spaltentypen weiß.
Was ist hier die beste Lösung? Gibt es eine bessere Update-Abfrage für mehrere Zeilen? Gibt es eine Funktion oder Syntax wieAS t(x:gettype(foo.x), y:gettype(foo.y), pkid:gettype(foo.pkid))
?