funktionen du har borde snarare vara:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Citera inte språknamnet. Det är en identifierare.
-
Tillhandahåll alltid en mållista med fasta påståenden. Annars, om du senare ändrar tabelldefinitionen, kan funktionen bete sig på oväntade sätt.
-
Använd aldrig
char(n)
, om du inte vet vad du gör. Jag skulle bara användatext
.
För att infoga flera rader , kan du ta en array av sammansatt typ eller två arrayer med samma antal element att odla parallellt. Visar det senare:
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;
Ring:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Jag skulle hellre använda en plpgsql-funktion och kontrollera att antalet element är detsamma i båda arrayerna för att förhindra misstag. Använd array_length(arr1, 1)
...
Postgres 9.4 eller senare ...
... introducerade en ny variant av unnest som accepterar flera arrayer parallellt - utan egenskaperna hos ovanstående hack (använder aldrig en CROSS JOIN
som standard )
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list