列名称作为变量

时间:2017-06-05 17:38:35

标签: sql postgresql

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

{{1}}

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您是否可以使用动态SQL获取此结果?类似的东西:

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

答案 1 :(得分: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条件的值。必须在函数中的某个位置或作为参数获取。