私はこの次のコードを持っています:
BEGIN
x := split_part(text, ',', 1);
UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = x;
END
しかし、idx
という名前の列テーブルは数値型であり、split_part
は文字タイプを変数x
に返します。 CAST
を使用してみましたが、正しく使用する方法がわかりません。
何か案は?
このような:
UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = CAST (x AS INTEGER);
(INTEGER
の代わりに適切な数値型を使用してください)。
またはもっと簡単:
UPDATE albumphoto
SET order = 1
WHERE idtable = 1
AND idx = split_part(text, ',', 1)::int -- or whatever type it is
AND order IS DISTINCT FROM 1;
expression::type
は、キャストするための単純な(SQL標準ではない)Postgresの方法です。章のマニュアルの詳細 型キャスト 。
詳細 PostgreSQLのデータ型 。
私が追加した最後の述語は、order
がすでにbe1
である可能性がある場合に役立ちます。この場合、更新は変更されません。何でも、それでも同じ費用がかかります。代わりに何もしません。関連(最後の段落を検討してください):
そして、ここでは変数を必要としません。