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
.