我想传递列名作为参数。在这里,我写了一个查询来从表用户中选择“user_id”列,但是它将user_id作为文本返回。列名作为变量
EXECUTE format('SELECT $1 FROM users
WHERE name=''name''')
USING 'user_id';
我该怎么做?
我想传递列名作为参数。在这里,我写了一个查询来从表用户中选择“user_id”列,但是它将user_id作为文本返回。列名作为变量
EXECUTE format('SELECT $1 FROM users
WHERE name=''name''')
USING 'user_id';
我该怎么做?
你不能使用动态SQL来获得这个结果吗?是这样的:
EXECUTE 'SELECT '|| get_columns()|| ' FROM table_name'
根据documentation ...
注意参数符号只能用于数据值 - 如果你 要使用动态确定表或列名,你必须 将它们以文本方式插入到命令字符串中。例如,如果 前面的查询需要对动态选择的表来完成...
因此,你需要像这样
EXECUTE 'SELECT '
|| quote_ident(p_column)
|| ' FROM users '
|| ' WHERE name = $1'
INTO v_result
USING name;
p_column
被作为参数收到的列名的功能。
v_result
是存储结果的变量。如果你不关心结果,这个INTO
部分可以被丢弃。
name
是提供给where条件的值。必须在你的函数中的某个地方,或者作为一个参数。
您无法传递列名作为参数。您需要更改查询字符串。 –