首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组用作postgres动态sql中的参数

问将数组用作postgres动态sql中的参数
EN

Stack Overflow用户
提问于 2014-09-12 09:25:26
回答 2查看 2.3K关注 0票数 1

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

代码语言:javascript
复制
    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语句(但是,这正是我想要避免的)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-12 13:20:07

即使将数组扩展为USING的参数列表是可能的(但事实并非如此),您在第一次想要混合数据类型时也会遇到麻烦。

您是否与format(..)说明符一起查看过%L?它不能解决混合类型的问题,但除此之外,它将有效。

代码语言:javascript
复制
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中单引号是合法的。

票数 1
EN

Stack Overflow用户

发布于 2014-09-12 11:59:48

数组本身就是参数的可能值,因此它不能也是参数值的容器。

在您的示例中,pl/pgsql解释器将在USING之后的整个数组作为$1参数的值。

此外,如果该语言支持将自动数组解嵌套为$N参数,则通常情况下不适合,因为数组中的值被约束为相同的类型,而$N参数则不受约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25804976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档