Fungsi yang Anda miliki seharusnya:
CREATE FUNCTION insertdata(varchar(10),varchar(40))
RETURNS VOID AS
$$
INSERT INTO mahasiswa(col_name1, col_name2)
VALUES ($1,$2);
$$
LANGUAGE sql STRICT;
-
Jangan mengutip nama bahasa. Ini adalah pengenal.
-
Selalu berikan daftar target dengan pernyataan tetap. Jika tidak, jika nanti Anda mengubah definisi tabel, fungsi tersebut dapat berperilaku dengan cara yang tidak terduga.
-
Jangan pernah menggunakan
char(n)
, kecuali Anda tahu apa yang Anda lakukan. Saya hanya menggunakantext
.
Untuk menyisipkan beberapa baris , Anda dapat mengambil array tipe komposit atau dua array dengan jumlah elemen yang sama untuk membongkar secara paralel. Mendemonstrasikan yang terakhir:
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;
Telepon:
SELECT insertdata ('{1234567890,0987654321}', '{Nahrun,Hartono}');
Saya lebih suka menggunakan fungsi plpgsql dan memeriksa apakah jumlah elemen sama di kedua array untuk mencegah kesalahan. Gunakan array_length(arr1, 1)
...
Postgres 9.4 atau lebih baru ...
... memperkenalkan varian baru unnest yang menerima banyak larik secara paralel - tanpa kebiasaan peretasan di atas (tidak pernah default ke CROSS JOIN
)
INSERT INTO mahasiswa(col_name1, col_name2)
SELECT * FROM unnest(_arr1, _arr2); -- must be in FROM list