我想将列名作为参数传递。在这里,我编写了一个查询来从表用户中选择列'user_id',但它将user_id作为文本返回。
{{1}}
我该怎么做?
答案 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条件的值。必须在函数中的某个位置或作为参数获取。