PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara INSERT INTO table dari dynamic query?

Kueri dasar untuk membuat perintah secara dinamis:

SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
            , tbl_des, col_des, col_src, tbl_src) As sql
FROM   table3;

Ini menghasilkan kueri seperti:

INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"

Perhatikan ejaan huruf besar yang dikutip. Tidak seperti di perintah SQL, di mana pengidentifikasi yang tidak dikutip dilipat menjadi huruf kecil secara otomatis, string di tabel Anda sekarang peka huruf besar-kecil!

Saya sarankan Anda tidak pernah pengenal tanda kutip ganda dan gunakan nama legal dengan huruf kecil secara eksklusif.

Untuk mengotomatisasi:

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$$;

Anda membutuhkan untuk memahami format() fungsi. Baca manual .

Anda juga dapat membungkus ini menjadi fungsi plpgsql dan meneruskan parameter tambahan:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengoptimalkan banyak gabungan

  2. Hibernate :Pilih kolom yang berisi data biner yang tidak boleh dimuat

  3. Bagaimana cara menghindari kondisi balapan saat menggunakan metode find_or_create dari DBIx::Class::ResultSet?

  4. Bagaimana cara terhubung ke localhost PostgreSQL di Mac menggunakan GUI PSequel?

  5. Bagaimana cara mendapatkan nama dan tipe kolom dari kueri PostgreSQL (tanpa menjalankannya)?