54

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

配列を適切にループする方法は?

4

1 に答える 1

109
DO
$do$
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;
END
$do$;

FOREACHまたは、PostgreSQL 9.1 以降ではより簡単です。

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

多次元配列については、次を参照してください。

generate_series()ただし、またはを使用したセットベースのソリューションは、unnest()多くの場合、大きなセットをループするよりも高速です。基本的な例:

またはタグを検索してください。

于 2012-04-18T17:24:02.737 に答える