Я пытаюсь создать итеративную переменную для использования в операторе выбора. Если я жестко закодирую переменную, мой блок кода будет работать нормально:
DO
$$
DECLARE
num integer;
BEGIN
num := (select count(*) from event where event_status in ('pending', 'failed'));
raise notice 'count here: %', num;
END;
$$
Однако, если я пытаюсь создать переменную с именем statuses из итерируемого объекта, я получаю сообщение об ошибке «синтаксическая ошибка в массиве или рядом с ним»:
DO
$$
DECLARE
statueses array := ('pending', 'failed');
num integer;
BEGIN
num := (select count(*) from event where event_status in statuses);
raise notice 'count here: %', num;
END;
$$
Я использую неправильный тип данных? Как заставить это работать? Обратите внимание, я использую PostgreSQL.
Можно попробовать statuses text[] := '{"pending","failed"}'. Хотя не уверен в синтаксисе.
@Hitobat получает сообщение об ошибке: syntax error at or near "statuses"


См. ienablemuch.com/2010/07/postgresqls-findinset.html, чтобы узнать, как создать PG эквивалент функции MySQL
FIND_IN_SET(), а затем использовать строкуstatuses := 'pending,failed';, разделенную запятыми.