PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment insérer plusieurs lignes à l'aide d'une fonction dans PostgreSQL

La fonction dont vous disposez devrait plutôt être :

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • Ne citez pas le nom de la langue. C'est un identifiant.

  • Fournissez toujours une liste cible avec des instructions persistantes. Sinon, si vous modifiez ultérieurement la définition de la table, la fonction peut se comporter de manière inattendue.

  • Ne jamais utiliser char(n) , sauf si vous savez ce que vous faites. J'utiliserais simplement text .

Pour insérer plusieurs lignes , vous pouvez prendre un tableau de type composite ou deux tableaux avec le même nombre d'éléments à désimbriquer en parallèle. Démonstration de ce dernier :

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;

Appel :

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

Je préfère utiliser une fonction plpgsql et vérifier que le nombre d'éléments est le même dans les deux tableaux pour éviter les erreurs. Utilisez array_length(arr1, 1) ...

Postgres 9.4 ou version ultérieure...

... a introduit une nouvelle variante de désimbrication qui accepte plusieurs tableaux en parallèle - sans les bizarreries du hack ci-dessus (ne prend jamais par défaut un CROSS JOIN )

   INSERT INTO mahasiswa(col_name1, col_name2)
   SELECT * FROM unnest(_arr1, _arr2);  -- must be in FROM list