我有桌子:
---------------------------------------
id (integer) | name (character varying)
---------------------------------------
我想插入由变化的字符数组表示的多行。我有功能代码:
create or replace function add_task_state( TEXT ) returns void as $$
declare
_str_states character varying[];
begin
_str_states = string_to_array($1,',');
insert into task_states (name) values ???;
end;
$$
language plpgsql;
我怎么能这样做?
答案 0 :(得分:0)
我假设id
是自动分配的?
尝试这种方法:
create or replace function add_task_state( TEXT ) returns void as $$
begin
insert into task_states (name) (select unnest(string_to_array($1, ',')));
end;
$$
language plpgsql;
然后:
select add_task_state( 'h,c,f' )
会给:
id name
---------
1 h
2 c
3 f
这与我的回答here
非常相似答案 1 :(得分:0)
您可以使用FOREACH,该功能应该是
create or replace function add_task_state( TEXT ) returns void as $$
DECLARE
a text[] := string_to_array($1,',');
i text;
BEGIN
FOREACH i IN ARRAY a --loop through each element in array `a`
LOOP
insert into task_states (name) values (i);
END LOOP;
end;
$$
language plpgsql;
如果您的Postgres版本早于9.1,那么您可以使用
FOR i in 1..array_length(a,1)
LOOP
insert into task_states (name) values (a[i]);
END LOOP;
而不是FOREACH
使用:select add_task_state('value1,value2,value3')