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
; untukEXECUTE
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
.