De functie die je hebt zou eerder moeten zijn:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Citeer de taalnaam niet. Het is een identificatie.
-
Geef altijd een doellijst met persistente verklaringen. Anders, als u later de tabeldefinitie wijzigt, kan de functie zich op onverwachte manieren gedragen.
-
Gebruik nooit
char(n)
, tenzij je weet wat je doet. Ik zou gewoontext
gebruiken .
Om meerdere rijen in te voegen , kunt u een array van het samengestelde type nemen of twee arrays met hetzelfde aantal elementen parallel te ontlasten. Laatstgenoemde demonstreren:
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;
Bel:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Ik zou liever een plpgsql-functie gebruiken en controleren of het aantal elementen in beide arrays hetzelfde is om fouten te voorkomen. Gebruik array_length(arr1, 1)
...
Postgres 9.4 of hoger ...
... introduceerde een nieuwe variant van unnest die meerdere arrays tegelijk accepteert - zonder de eigenaardigheden van de bovenstaande hack (standaard nooit een CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list