EXECUTE ... USING
funguje pouze v PL/PgSQL - tedy v rámci funkcí nebo DO
bloky napsané v jazyce PL/PgSQL. Nefunguje v prostém SQL; EXECUTE
v prostém SQL je to úplně jiné, pro provádění připravených příkazů. Dynamické SQL nemůžete používat přímo v dialektu SQL PostgreSQL.
Porovnejte:
EXECUTE ... USING
PL/PgSQL; doEXECUTE
SQL
Viz 2. poslední par v mé předchozí odpovědi.
Kromě toho, že neběží kromě PL/PgSQL, váš SQL příkaz je špatný, nebude dělat to, co očekáváte. If (select id from ids where condition = some_condition)
vrátí hodnotu 42
, příkaz by selhal, pokud by id
je celé číslo. Pokud se přenese do textu, dostanete:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
To je neplatné. Ve skutečnosti chcete result_42_table
nebo "result_42_table"
. Musel bys napsat něco víc jako:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... pokud musíte použít quote_ident
.