我有一个以下表格的表格:
id
id_ref
value1
value2
...
valueN
其中value1-> N是整数字段,并且接收整数参数“value”的函数指定哪个字段需要更新,即如果“value”param是2,则只更新value2字段。
我想做的(在函数中)是这样的:
CREATE OR REPLACE FUNCTION my_cool_function(value integer) RETURNS bigint AS
...
UPDATE [table name here]
SET "value" || CAST(value[parameter] AS varchar) = [some value]
WHERE [condition];
...
LANGUAGE 'plpgsql'
...
但上面的代码不正确,正在寻找实现这一目标的方法。
答案 0 :(得分:2)
您无法构建这样的标识符,但您可以使用EXECUTE
来运行字符串中的某些SQL:
execute 'update table set '
|| quote_ident('value' || value)
|| ' = '
|| quote_literal('some value')
|| ' where ...';
您可能需要也可能不需要quote_ident
and quote_literal
来电,但我可能会用这些来帮助您养成良好的习惯。您可以使用USING避免quote_literal
:
execute 'update table set '
|| quote_ident('value' || value)
|| ' = $1'
|| ' where ...' using some_value;