Die Funktion, die Sie haben sollte eher sein:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Zitieren Sie nicht den Namen der Sprache. Es ist eine Kennung.
-
Geben Sie immer eine Zielliste mit persistenten Anweisungen an. Andernfalls kann sich die Funktion unerwartet verhalten, wenn Sie später die Tabellendefinition ändern.
-
Verwenden Sie niemals
char(n)
, es sei denn, Sie wissen, was Sie tun. Ich würde einfachtext
verwenden .
Um mehrere Zeilen einzufügen , können Sie ein Array vom zusammengesetzten Typ oder zwei Arrays mit derselben Anzahl von Elementen nehmen parallel zu entschachteln. Letzteres demonstrieren:
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;
Aufruf:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Ich würde lieber eine plpgsql-Funktion verwenden und prüfen, ob die Anzahl der Elemente in beiden Arrays gleich ist, um Fehler zu vermeiden. Verwenden Sie array_length(arr1, 1)
...
Postgres 9.4 oder höher ...
... eine neue Variante von Unnest eingeführt, die mehrere Arrays parallel akzeptiert - ohne die Macken des obigen Hacks (nie standardmäßig ein CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list