PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como inserir várias linhas usando uma função no PostgreSQL


A função que você tem deveria ser:
CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;

  • Não cite o nome do idioma. É um identificador.

  • Sempre forneça uma lista de destino com instruções persistentes. Caso contrário, se você alterar posteriormente a definição da tabela, a função poderá se comportar de maneiras inesperadas.

  • Nunca use char(n) , a menos que você saiba o que está fazendo. Eu usaria apenas text .

Para inserir várias linhas , você pode pegar um array do tipo composto ou dois arrays com o mesmo número de elementos desaninhar em paralelo. Demonstrando este último:
CREATE FUNCTION insertdata(_arr1 text[], _arr2 text[]) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   SELECT unnest(_arr1), unnest(_arr2);
$$ 
LANGUAGE sql STRICT;

Ligar:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');

Eu prefiro usar uma função plpgsql e verificar se o número de elementos é o mesmo em ambos os arrays para evitar erros. Use array_length(arr1, 1) ...

Postgres 9.4 ou posterior...


... introduziu uma nova variante de unnest que aceita vários arrays em paralelo - sem as peculiaridades do hack acima (nunca o padrão é um CROSS JOIN )
   INSERT INTO mahasiswa(col_name1, col_name2)
   SELECT * FROM unnest(_arr1, _arr2);  -- must be in FROM list