我试图运行这样的动态查询(只是一个想法):

    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中用单引号引整数是合法的。

09-27 00:31
查看更多