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 .