そのためのループは必要ありませんunnest
。配列string_to_array
を行のセットに変換してから、単純なinsert ... select
構成を使用できます。
create or replace function ff(int, text) returns integer as $$
begin
insert into test(i, t)
select $1, s
from unnest(string_to_array($2, ',')) as dt(s);
return 0;
end
$$ language plpgsql;
また、途中でいくつかのタイプミス ( RETRUNS
、RETRUN
、および)を修正しました。pgsql
次を使用することもできますregexp_split_to_table
。
create or replace function ff(int, text) returns integer as $$
begin
insert into test(i, t)
select $1, s
from regexp_split_to_table($2, ',') as dt(s);
return 0;
end
$$ language plpgsql;
あなたが 8.1 石器時代で立ち往生していて、それについて何もできない場合は、おそらく次のようなことがうまくいくでしょう:
create or replace function ff(int, text) returns integer as $$
declare
a text[];
i int;
begin
select string_to_array($2, ',') into a;
i := 1;
loop
if i > array_upper(a, 1) then
exit;
else
insert into test(i, t) values($1, a[i]);
i := i + 1;
end if;
end loop;
return 0;
end
$$ language plpgsql;
8.1 で動作するはずですが、確認するために 8.1 にアクセスできません。