我想创建一个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
答案 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):
多维数组必须具有 匹配每个维度的范围。一个 不匹配会导致错误报告。