Postgres: проверка входного массива функции на нулевое или пустое или содержащее нулевое - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу проверить ввод аргумента, чтобы, например, проверить, что _product_ids :: BIGINT [] не равно нулю или не содержит нуля (или, необязательно, не содержит только нуля) или не пусто.

Вот что у меня есть:

IF (
  _product_ids IS NULL -- Is null
  OR -1 = ANY(_product_ids) IS NULL -- Contains null
  OR COALESCE(ARRAY_LENGTH(_product_ids, 1) < 1, TRUE) -- Is empty
) THEN
  RAISE EXCEPTION 'INPUT IS INVALID';
END IF;

Я бы хотел настроить 'Contains null', чтобы он возвращал true только в том случае, если есть только нули.Кроме того, я хотел бы знать, есть ли способ проверить наличие пустого и пустого массива одновременно.

Используется PostgresSQL 9.6.

1 Ответ

0 голосов
/ 25 апреля 2018

Выражение может выглядеть так:

_product_ids is null -- is null
or cardinality(_product_ids) = 0 -- is empty
or (select bool_and(e is null) from unnest(_product_ids) e) -- contains only nulls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...