Chèn RECORD vào bảng trong hàm kích hoạt


8

Tôi muốn chèn biến loại dữ liệu RECORD (biến MỚI) vào bảng trong trình kích hoạt. SQL sẽ trông như thế nào?
Những nỗ lực sau đây đã không thành công:

EXECUTE 'INSERT INTO my_table VALUES ' || NEW;
EXECUTE 'INSERT INTO my_table VALUES ' || NEW.*;
EXECUTE 'INSERT INTO my_table SELECT * FROM ' || NEW;

Câu trả lời:


5

Bạn phải mở rộng hồ sơ.

Tôi cũng đã thêm một danh sách cột vào insertvà sử dụng EXECUTE ... USINGhình thức an toàn hơn nhiều .

EXECUTE 'INSERT INTO my_table (col1, col2, col3) VALUES (?, ?, ?)' USING NEW.col1, NEW.col2, NEW.col3;

Vui lòng giải thích trường hợp sử dụng của bạn chi tiết hơn nếu điều này không giải quyết được vấn đề.


15

Trên thực tế, bạn không phải mở rộng hồ sơ bằng tay. Miễn là số lượng , trình tựloại cột khớp nhau giữa hai bảng, bạn có thể sử dụng hình thức đơn giản hơn nhiều này:

EXECUTE 'INSERT INTO my_table SELECT ($1).*'
USING NEW;

Vì tên bảng của bạn có vẻ ổn định, bạn thậm chí không cần SQL động EXECUTE. Chỉ đơn giản là INSERT:

INSERT INTO my_table SELECT (NEW).*

Các dấu ngoặc đơn được yêu cầu cho một kiểu hỗn hợp để làm cho cú pháp không rõ ràng.

Tự hỏi những gì có thể thay đổi trong ứng dụng của bạn trong tương lai:

  • Nếu bảng mục tiêu phải đồng bộ với bảng nguồn (hoặc mục tiêu và nguồn giống nhau), thì tốt hơn hết là không liệt kê các cột một cách rõ ràng.

  • Nếu bạn muốn chỉ chọn một số cột nhất định và không muốn thay đổi điều đó với các bản cập nhật có thể có cho bảng nguồn hoặc bảng đích, tốt hơn là cung cấp danh sách cột.


Kevin, một thành viên trong nhóm cảm ơn bạn. Ông đã tìm kiếm trong nhiều ngày, và cuối cùng đã tìm thấy viên ngọc này. Đây nên là câu trả lời chính thức !!! Cảm ơn bạn!
asnyder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.