Den funktion du har burde hellere være:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Angiv ikke sprogets navn. Det er en identifikator.
-
Giv altid en målliste med vedvarende udsagn. Ellers, hvis du senere ændrer tabeldefinitionen, kan funktionen opføre sig på uventede måder.
-
Brug aldrig
char(n)
, medmindre du ved, hvad du laver. Jeg ville bare brugetext
.
For at indsætte flere rækker , kan du tage et array af sammensat type eller to arrays med det samme antal elementer at unneste parallelt. Demonstrerer sidstnævnte:
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 til:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Jeg vil hellere bruge en plpgsql-funktion og kontrollere, at antallet af elementer er det samme i begge arrays for at forhindre fejl. Brug array_length(arr1, 1)
...
Postgres 9.4 eller nyere ...
... introducerede en ny variant af unnest, der accepterer flere arrays parallelt - uden ejendommelighederne ved ovenstående hack (standarder aldrig en CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list