EXECUTE ... USING
PL /PgSQLでのみ機能します-つまり、関数内またはDO
PL/PgSQL言語で記述されたブロック。プレーンSQLでは機能しません。 EXECUTE
プレーンSQLでは、プリペアドステートメントを実行するために完全に異なります。 PostgreSQLのSQLダイアレクトで動的SQLを直接使用することはできません。
比較:
- PL/PgSQLの
EXECUTE ... USING
; - SQLの
EXECUTE
以前の回答の最後から2番目のパーを参照してください。
PL / PgSQL以外で実行されないことに加えて、SQLステートメントが間違っているだけでなく、期待どおりに機能しません。 (select id from ids where condition = some_condition)
の場合 戻り値は42
と言います 、id
の場合、ステートメントは失敗します は整数です。テキストにキャストすると、次のようになります。
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
それは無効です。実際にはresult_42_table
が必要です または"result_42_table"
。次のようなものを書く必要があります:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... quote_ident
を使用する必要がある場合 。