我想创建一个 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
指定为数组(整数):
-- 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 ):
multidimensional arrays must have matching extents for each dimension. A mismatch causes an error report.
关于PostgreSQL:带有 ANY($1) 的 PREPARED 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397382/