PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách chèn nhiều hàng bằng một hàm trong PostgreSQL

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ụng text .

Để 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - số lượng tham số tối đa trong mệnh đề IN?

  2. Thiết lập môi trường tối ưu cho PostgreSQL

  3. Cách Setseed () hoạt động trong PostgreSQL

  4. Gọi một hàm có kiểu kết hợp làm đối số từ truy vấn gốc trong jpa

  5. Hiển thị tên cột với giá trị tối đa giữa một số cột