2012-04-18 3 views
22

plpgsql関数で整数配列(integer[])をループしようとしています。このような何か:PL/pgSQLで整数[]を反復する

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 

正しくループする方法はありますか?

答えて

50
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 

またはnew FOREACH in PostgreSQL 9.1を試してみてください。

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

しかし、generate_series()またはunnest()とセットベースのソリューションは、多くの場合、大きなセットのためのループよりも高速です。

基本例:

以上のタグまたはを検索します。

+0

今、私は 'f(array [1,2,3,4])'として関数に配列を渡していますが、配列を関数に渡す方法はありますか? –

+3

'f( '{1,2,3,4}' :: int [])'は*別の方法です。より良い? - あなたが決める! –