PostgreSQL:带有ANY($ 1)的PREPARED语句

时间:2011-06-18 16:38:00

标签: postgresql prepared-statement any

我想创建一个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);
                                                             ^

我无法弄清楚这个问题。

请告知。

的问候,
Mayank

1 个答案:

答案 0 :(得分:4)

如错误所示,您需要将$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):

  

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