Chức năng bạn có đúng hơn nên là:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Không trích dẫn tên ngôn ngữ. Đó là một số nhận dạng.
-
Luôn cung cấp một danh sách mục tiêu với các câu lệnh tồn tại. Ngoài ra, nếu sau này bạn thay đổi định nghĩa bảng, hàm có thể hoạt động theo những cách không mong muốn.
-
Không bao giờ sử dụng
char(n)
, trừ khi bạn biết mình đang làm gì. Tôi chỉ sử dụngtext
.
Để chèn nhiều hàng , bạn có thể lấy một mảng kiểu kết hợp hoặc hai mảng có cùng số phần tử để unnest song song. Thể hiện điều sau:
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;
Gọi:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Tôi muốn sử dụng một hàm plpgsql và kiểm tra xem số lượng phần tử có giống nhau trong cả hai mảng hay không để tránh nhầm lẫn. Sử dụng array_length(arr1, 1)
...
Postgres 9.4 trở lên ...
... đã giới thiệu một biến thể mới của unnest chấp nhận nhiều mảng song song - không có những điều kỳ quặc như ở trên (không bao giờ mặc định là CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list