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

Làm cách nào để CHÈN VÀO bảng từ truy vấn động?

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:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:chuyển đổi một hàng thành nhiều hàng (bỏ chia)

  2. SQL đã tham gia vào ngày cuối cùng

  3. PostgreSQL:ST_GeomFromText (không xác định) không tồn tại

  4. Hợp nhất các hàng postgres và thay thế các giá trị bằng giá trị mới nhất khi không rỗng

  5. Sửa bảng TOAST bị hỏng