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

kueri sql dinamis di postgres

EXECUTE ... USING hanya berfungsi di PL/PgSQL - yaitu di dalam fungsi atau DO blok yang ditulis dalam bahasa PL/PgSQL. Itu tidak bekerja di SQL biasa; EXECUTE dalam SQL biasa benar-benar berbeda, untuk mengeksekusi pernyataan yang disiapkan. Anda tidak dapat menggunakan SQL dinamis secara langsung dalam dialek SQL PostgreSQL.

Bandingkan:

  • EXECUTE ... USING; untuk
  • EXECUTE SQL>

Lihat par terakhir ke-2 dalam jawaban saya sebelumnya.

Selain tidak berjalan kecuali di PL/PgSQL, pernyataan SQL Anda salah, itu tidak akan melakukan apa yang Anda harapkan. If (select id from ids where condition = some_condition) kembali katakan 42 , pernyataan akan gagal jika id adalah bilangan bulat. Jika dikirim ke teks, Anda akan mendapatkan:

EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';

Itu tidak valid. Anda sebenarnya ingin result_42_table atau "result_42_table" . Anda harus menulis sesuatu yang lebih seperti:

EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))

... jika Anda harus menggunakan quote_ident .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL Upsert membedakan baris yang disisipkan dan diperbarui menggunakan kolom sistem XMIN, XMAX, dan lainnya

  2. Format Angka dengan Koma di PostgreSQL

  3. Bagaimana cara menanyakan kolom json untuk objek kosong?

  4. Memulai dan mengisi wadah Postgres di Docker

  5. Bagaimana cara mempercepat penghitungan baris dalam tabel PostgreSQL?