EXECUTE ... USING
werkt alleen in PL/PgSQL - dwz binnen functies of DO
blokken geschreven in de PL/PgSQL-taal. Het werkt niet in gewone SQL; de EXECUTE
in gewone SQL is heel anders, voor het uitvoeren van voorbereide instructies. U kunt dynamische SQL niet rechtstreeks in het SQL-dialect van PostgreSQL gebruiken.
Vergelijk:
- PL/PgSQL's
EXECUTE ... USING
; naar - SQL's
EXECUTE
Zie de 2e laatste par in mijn eerdere antwoord.
Behalve dat het niet werkt, behalve in PL/PgSQL, is uw SQL-statement verkeerd, het zal niet doen wat u verwacht. If (select id from ids where condition = some_condition)
retourneert zeg 42
, zou de instructie mislukken als id
is een geheel getal. Als het naar tekst wordt gecast, krijg je:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Dat is ongeldig. U wilt eigenlijk result_42_table
of "result_42_table"
. Je zou iets meer moeten schrijven als:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... als je quote_ident
moet gebruiken .