2017-06-05 59 views
1

我想传递列名作为参数。在这里,我写了一个查询来从表用户中选择“user_id”列,但是它将user_id作为文本返回。列名作为变量

EXECUTE format('SELECT $1 FROM users 
WHERE name=''name''') 
USING 'user_id'; 

我该怎么做?

+1

您无法传递列名作为参数。您需要更改查询字符串。 –

回答

0

你不能使用动态SQL来获得这个结果吗?是这样的:

EXECUTE 'SELECT '|| get_columns()|| ' FROM table_name' 
0

根据documentation ...

注意参数符号只能用于数据值 - 如果你 要使用动态确定表或列名,你必须 将它们以文本方式插入到命令字符串中。例如,如果 前面的查询需要对动态选择的表来完成...

因此,你需要像这样

EXECUTE 'SELECT ' 
    || quote_ident(p_column) 
    || ' FROM users ' 
    || ' WHERE name = $1' 
    INTO v_result 
    USING name; 

p_column被作为参数收到的列名的功能。
v_result是存储结果的变量。如果你不关心结果,这个INTO部分可以被丢弃。
name是提供给where条件的值。必须在你的函数中的某个地方,或者作为一个参数。