我试图运行这样的动态查询(只是一个想法):
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语句(但是,这正是我想要避免的)。
发布于 2014-09-12 13:20:07
即使将数组扩展为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中单引号是合法的。
发布于 2014-09-12 11:59:48
数组本身就是参数的可能值,因此它不能也是参数值的容器。
在您的示例中,pl/pgsql解释器将在USING之后的整个数组作为$1参数的值。
此外,如果该语言支持将自动数组解嵌套为$N参数,则通常情况下不适合,因为数组中的值被约束为相同的类型,而$N参数则不受约束。
https://stackoverflow.com/questions/25804976
复制相似问题