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 semplicementetext
.
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