如何按名称更新字段?

时间:2012-09-28 05:51:46

标签: postgresql

我有一个以下表格的表格:

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

但上面的代码不正确,正在寻找实现这一目标的方法。

1 个答案:

答案 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;