2011-06-18 34 views
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); 
                  ^

我不能找出问题。

请指教。

问候,
Mayank

+1

在这种情况下,$ 1是什么?一个数组还是一个值? –

+0

$ 1是ARRAY .. – Mayank

回答

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

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