Bạn tốt hơn nhiều nên sử dụng INSTEAD OF INSERT
kích hoạt tại đây:
CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
id integer;
BEGIN
INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
RETURN NEW;
END; $$ LANGUAGE PLPGSQL;
CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
FOR EACH ROW EXECUTE PROCEDURE MyFuncName();
Kiểm tra giá trị hiện tại của một chuỗi để xem nội dung nào được chèn vào bảng khác là xấu, xấu thực tiễn. Ngay cả khi bạn đang ở đây trong một giao dịch duy nhất, đừng làm điều đó.
Bạn đang nhầm lẫn về vấn đề RETURNING
thông tin, vì tôi cũng bối rối khi tôi đọc câu hỏi của bạn. Bên trong một hàm sử dụng INTO
mệnh đề để điền các biến được khai báo cục bộ để giữ các giá trị bản ghi mà sau đó bạn có thể sử dụng trong các câu lệnh tiếp theo. Bên ngoài một chức năng, hãy sử dụng RETURNING
như bạn làm trong đoạn mã cao nhất của mình.