3

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

我无法弄清楚这个问题。

请指教。

问候,
马扬克

4

1 回答 1

4

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

-- 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):

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

于 2011-06-18T17:33:37.250 回答