EXECUTE ... USING fungerar bara i PL/PgSQL - dvs inom funktioner eller DO block skrivna på PL/PgSQL-språket. Det fungerar inte i vanlig SQL; EXECUTE i vanlig SQL är helt annorlunda, för att köra förberedda satser. Du kan inte använda dynamisk SQL direkt i PostgreSQL:s SQL-dialekt.
Jämför:
- PL/PgSQL:s
EXECUTE ... USING; till - SQL:s
EXECUTE
Se 2:a sista paret i mitt tidigare svar.
Förutom att inte köras förutom i PL/PgSQL är din SQL-sats fel, den kommer inte att göra vad du förväntar dig. If (select id from ids where condition = some_condition) returnerar säger 42 , skulle satsen misslyckas om id är ett heltal. Om det castas till text får du:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Det är ogiltigt. Du vill faktiskt ha result_42_table eller "result_42_table" . Du måste skriva något mer som:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... om du måste använda quote_ident .