0

我有一个如下形式的表格:

id
id_ref
value1
value2
...
valueN

其中value1->N为整数字段,函数接收一个整数参数“value”,指定需要更新哪个字段,即如果“value”参数为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'
...

但是上面的代码不正确,正在寻找一种方法来实现这一点。

4

1 回答 1

2

你不能建立这样的标识符,但你可以EXECUTE用来运行一些在字符串中的 SQL:

execute 'update table set '
     || quote_ident('value' || value)
     || ' = '
     || quote_literal('some value')
     || ' where ...';

您可能需要也可能不需要quote_identandquote_literal调用,但我可能会使用它们来帮助建立良好的习惯。您可以避免使用quote_literalwith USING:

execute 'update table set '
     || quote_ident('value' || value)
     || ' = $1'
     || ' where ...' using some_value;
于 2012-09-28T06:36:38.763 回答