funkce, kterou máte by spíše mělo být:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Neuvádějte název jazyka. Je to identifikátor.
-
Vždy poskytněte cílový seznam s trvalými prohlášeními. Jinak, pokud později změníte definici tabulky, funkce se může chovat neočekávaným způsobem.
-
Nikdy nepoužívejte
char(n)
, pokud nevíte, co děláte. Použil bych pouzetext
.
Chcete-li vložit více řádků , můžete vzít pole složeného typu nebo dvě pole se stejným počtem prvků k paralelnímu uhnízdění. Předvedení toho druhého:
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;
Volejte:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Raději bych použil funkci plpgsql a zkontroloval, zda je počet prvků v obou polích stejný, aby se předešlo chybám. Použijte array_length(arr1, 1)
...
Postgres 9.4 nebo novější ...
... představila novou variantu unnest, která akceptuje více polí paralelně – bez zvláštností výše uvedeného hacku (nikdy není výchozí CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list