Функцията, която имате по-скоро трябва да бъде:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Не цитирайте името на езика. Това е идентификатор.
-
Винаги предоставяйте целеви списък с постоянни твърдения. В противен случай, ако по-късно промените дефиницията на таблицата, функцията може да се държи по неочакван начин.
-
Никога не използвайте
char(n)
, освен ако не знаете какво правите. Просто бих използвалtext
.
За вмъкване на няколко реда , можете да вземете масив от съставен тип или два масива с еднакъв брой елементи да се разгнезди паралелно. Демонстриране на последното:
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;
Обаждане:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Предпочитам да използвам функция plpgsql и да проверя дали броят на елементите е еднакъв и в двата масива, за да предотвратя грешки. Използвайте array_length(arr1, 1)
...
Postgres 9.4 или по-нова версия...
... въведе нов вариант на unnest, който приема множество масиви паралелно - без странностите на горния хак (никога не се задава по подразбиране CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list