Подтвердить что ты не робот

Итерация по целому числу [] в PL/pgSQL

Я пытаюсь перебрать целочисленный массив (integer[]) в функции plpgsql. Что-то вроде этого:

declare
    a integer[] = array[1,2,3];
    i bigint;
begin
    for i in a
loop 
    raise notice "% ",i;
end loop;
return true;
end

В моем фактическом примере использования целочисленный массив a передается как параметр функции. Я получаю эту ошибку:

ERROR:  syntax error at or near "$1"
LINE 1:   $1

Как правильно петлять массив?

4b9b3361

Ответ 1

DECLARE
   a integer[] := array[1,2,3];
   i integer;                   -- int, not bigint!
BEGIN
FOR i IN 1 .. array_upper(a, 1)
LOOP
   RAISE NOTICE '%', a[i];      -- single quotes!
END LOOP;
RETURN TRUE;
END

Или попробуйте новый FOREACH в PostgreSQL 9.1:

FOREACH i IN ARRAY a
LOOP 
   RAISE NOTICE '%', i;
END LOOP;

Однако решения на основе набора с generate_series() или unnest() часто быстрее, чем цикл для больших наборов.

Основные примеры:

Поиск тегов или для более.