我试图运行这样的动态查询(只是一个想法):
declare
params text[] ;
begin
params := ARRAY['30', 'sometext'];
return execute QUERY 'select id, label from "content" where id>$1 and label = $2' using params;
end ;
问题是,我的params数组可以有可变长度——我可以准备一个适当的select查询,但是我想使用“using”子句执行它,该数组包含所有标记为$的参数。
可能是这样的,或者我应该用已经放入语句中的值构建整个select语句(但是,这是我希望避免的)。
最佳答案
即使可以将数组扩展到USING
的参数列表中(这是不可能的),第一次想要混合数据类型时也会遇到麻烦。
您是否用format(..)
说明符研究过%L
?它不能解决混合类型的问题,但除此之外,它还能工作。
regress=> SELECT format('SELECT a FROM b WHERE z = %L and x = %L and y = %L', VARIADIC ARRAY[1, 2, 3]::integer[]);
format
-------------------------------------------------------
SELECT a FROM b WHERE z = '1' and x = '2' and y = '3'
(1 row)
虽然值是用引号引起来的,但在SQL中用单引号引整数是合法的。