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

Làm cách nào để chuyển một bản ghi đến một hàm PL / pgSQL?

Có nhiều tùy chọn khác nhau, tùy thuộc vào bức tranh hoàn chỉnh.
Về cơ bản, chức năng chèn của bạn có thể hoạt động như sau:

CREATE FUNCTION insert_thing (_thing flavored_view)
   RETURNS int AS
$func$
   INSERT INTO things (name) VALUES ($1.name) -- plus 30 more columns
   RETURNING id;
$func$ LANGUAGE sql;

Sử dụng loại hàng của chế độ xem , bởi vì NEW trong trình kích hoạt của bạn thuộc loại này.
Sử dụng một hàm SQL đơn giản, hàm này có thể được nội dòng và có thể hoạt động tốt hơn.

Cuộc gọi demo:

SELECT insert_thing('(1, foo, 1, bar)');

Bên trong trình kích hoạt của bạn flavored_trig () :

inserted_id := insert_thing(NEW);

Hoặc, về cơ bản được viết lại:

IF TG_OP = 'INSERT' THEN
   INSERT INTO flavored_things(thing_id, flavor)
   VALUES (insert_thing(NEW), NEW.flavor);
   RETURN NEW;
ELSIF ...

record không phải là một kiểu hợp lệ bên ngoài PL / pgSQL, nó chỉ là một trình giữ chỗ chung cho một loại hàng chưa xác định trong PL / pgSQL) vì vậy bạn không thể sử dụng nó cho một tham số đầu vào trong khai báo hàm.

Để có một hàm năng động hơn, chấp nhận nhiều loại hàng khác nhau bạn có thể sử dụng loại đa hình . Ví dụ:



  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:Ràng buộc duy nhất đối với Liên hợp 2 cột

  2. So sánh các tùy chọn cơ sở dữ liệu đám mây cho PostgreSQL

  3. Tìm nạp bài đăng từ những người dùng không chặn

  4. Trình tự trong Oracle / PostgreSQL không có ID trong câu lệnh chèn

  5. LỖI PostgreSQL:truy vấn con trong FROM không thể tham chiếu đến các quan hệ khác có cùng mức truy vấn