PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come inserire più righe usando una funzione in PostgreSQL

La funzione che hai dovrebbe piuttosto essere:

CREATE FUNCTION insertdata(varchar(10),varchar(40)) 
  RETURNS VOID AS 
$$ 
   INSERT INTO mahasiswa(col_name1, col_name2)
   VALUES ($1,$2); 
$$ 
LANGUAGE sql STRICT;
  • Non citare il nome della lingua. È un identificatore.

  • Fornisci sempre un elenco di destinazioni con istruzioni persistenti. Altrimenti, se in seguito modifichi la definizione della tabella, la funzione può comportarsi in modi imprevisti.

  • Non utilizzare mai char(n) , a meno che tu non sappia cosa stai facendo. Userei semplicemente text .

Per inserire più righe , puoi prendere un array di tipo composito o due array con lo stesso numero di elementi disnidare in parallelo. Dimostrando quest'ultimo:

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;

Chiama:

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

Preferirei usare una funzione plpgsql e controllare che il numero di elementi sia lo stesso in entrambi gli array per evitare errori. Usa array_length(arr1, 1) ...

Postgres 9.4 o successivo...

... ha introdotto una nuova variante di unnest che accetta più array in parallelo - senza le stranezze dell'hack di cui sopra (non imposta mai per impostazione predefinita un CROSS JOIN )

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