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_identquote_literalの呼び出しが必要な場合と不要な場合がありますが、私はおそらくそれらを使用して良い習慣を身に付けるのに役立てます。quote_literalUSINGで回避できます:

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