PostgreSQL: ПОДГОТОВЛЕННЫЙ оператор с ЛЮБОЙ ($ 1) - PullRequest
3 голосов
/ 18 июня 2011

Я хочу создать ПОДГОТОВЛЕННОЕ ЗАЯВЛЕНИЕ, где входными данными являются некоторые целые числа, число которых неизвестно.Я пытаюсь сделать следующее:

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 Ответ

4 голосов
/ 18 июня 2011

Как говорит ошибка, вам нужно указать $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 ):

многомерные массивы должны иметь соответствующие экстенты для каждого измерения.Несоответствие вызывает сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...