web-dev-qa-db-ja.com

PL / pgSQLでinteger []を反復処理する

整数配列(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

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

39
Dipro Sen
_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
_

または、PostgreSQLの new FOREACH9.1 を試してください:

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

ただし、 generate_series() または unnest() を使用したセットベースのソリューションは、大きなセットのループよりも高速です。

基本的な例:

タグを検索してください generate-series または nnest .

80