postgresql函数插入多行,其值由数组表示

时间:2015-12-24 07:58:08

标签: postgresql

我有桌子:

---------------------------------------
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;

我怎么能这样做?

2 个答案:

答案 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')