【问题标题】:PostgreSQL: PREPARED statement with ANY($1)PostgreSQL:带有 ANY($1) 的 PREPARED 语句
【发布时间】:2011-06-18 16:38:00
【问题描述】:

我想创建一个 PREPARED STATEMENT,其中输入是一些计数未知的整数。 我正在尝试做的方式是

PREPARE prep_select_data AS SELECT ARRAY[$1, id], $1, * FROM tbl_data WHERE id = ANY($1);

我得到的错误是:

ERROR:  op ANY/ALL (array) requires array on right side
LINE 1: ...ELECT ARRAY[$1, id], $1, * FROM tbl_data WHERE id = ANY($1);
                                                             ^

我无法找出问题所在。

请指教。

问候,
马扬克

【问题讨论】:

  • 在这种情况下$1 是什么?数组还是单个值?

标签: postgresql prepared-statement any


【解决方案1】:

正如错误所说,您需要将 $1 指定为数组(整数):

-- DEALLOCATE prep_select_data;
PREPARE prep_select_data (int[]) AS 
SELECT
    $1 || ARRAY[id], $1, *
FROM
    tbl_data 
WHERE
    id = ANY($1);

我将ARRAY[$1, id] 更改为$1 || ARRAY[id],所以结果如下:

EXECUTE prep_select_data ('{1, 2}');
 ?column? | ?column? | id | value 
----------+----------+----+-------
 {1,2,1}  | {1,2}    |  1 | aaa
 {1,2,2}  | {1,2}    |  2 | bbb

这是因为(来自doc):

多维数组必须有 每个维度的匹配范围。一种 不匹配会导致错误报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多