Truy vấn cơ bản để tạo lệnh động:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Điều này tạo ra một truy vấn như:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Lưu ý cách viết hoa thường được trích dẫn. Không giống như trong các lệnh SQL, trong đó các số nhận dạng chưa được trích dẫn tự động được xếp thành chữ thường, các chuỗi trong bảng của bạn hiện phân biệt chữ hoa chữ thường!
Tôi đề nghị bạn không bao giờ dấu ngoặc kép số nhận dạng và chỉ sử dụng các tên hợp pháp, viết thường.
Để tự động hóa:
DO
$$BEGIN
EXECUTE (
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3
-- WHERE table3_id = 123 -- select only *one* row!
);
END$$;
Bạn cần để hiểu format()
hàm số. Đọc hướng dẫn sử dụng
.
Bạn cũng có thể gói nó vào một hàm plpgsql và chuyển các tham số bổ sung: