funkcja, którą masz powinien być raczej:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Nie cytuj nazwy języka. To identyfikator.
-
Zawsze dostarczaj listę docelową z utrwalonymi instrukcjami. W przeciwnym razie, jeśli później zmienisz definicję tabeli, funkcja może zachowywać się w nieoczekiwany sposób.
-
Nigdy nie używaj
char(n)
, chyba że wiesz, co robisz. Po prostu użyłbymtext
.
Aby wstawić wiele wierszy , możesz wziąć tablicę typu złożonego lub dwie tablice o tej samej liczbie elementów rozpakować równolegle. Demonstracja tego ostatniego:
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;
Zadzwoń:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Wolałbym użyć funkcji plpgsql i sprawdzić, czy liczba elementów jest taka sama w obu tablicach, aby uniknąć błędów. Użyj array_length(arr1, 1)
...
Postgres 9.4 lub nowszy...
... wprowadzono nowy wariant unnest, który akceptuje wiele tablic równolegle - bez dziwactwa powyższego hacka (nigdy domyślnie CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list