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

$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から):

多次元配列には、各次元のエクステントが一致している必要があります。不一致があると、エラー レポートが発生します。

于 2011-06-18T17:33:37.250 に答える