2011-06-18 33 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 不匹配導致錯誤報告。