J'essaie de parcourir un tableau entier (integer[]
) dans une fonction plpgsql. Quelque chose comme ça:
declare
a integer[] = array[1,2,3];
i bigint;
begin
for i in a
loop
raise notice "% ",i;
end loop;
return true;
end
Dans mon cas d'utilisation réel, le tableau d'entiers a
est passé en paramètre à la fonction. Je reçois cette erreur:
ERROR: syntax error at or near "$1" LINE 1: $1
Comment parcourir correctement le tableau?
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
Ou essayez le nouveau FOREACH
dans PostgreSQL 9.1 :
FOREACH i IN ARRAY a
LOOP
RAISE NOTICE '%', i;
END LOOP;
Cependant, les solutions basées sur des ensembles avec generate_series()
ou unnest()
sont souvent plus rapides que le bouclage pour les grands ensembles.
Exemples de base:
Recherchez les balises generate-series ou nnest pour en savoir plus.