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 ...
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. record
Để 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ụ:
- Cách trả về bảng theo kiểu hàng trong PL / pgSQL
- Refactor một hàm PL / pgSQL để trả về kết quả đầu ra của các truy vấn SELECT khác nhau
- Cách viết hàm trả về giá trị văn bản hoặc số nguyên?