EXECUTE ... USING
virker kun i PL/PgSQL - altså indenfor funktioner eller DO
blokke skrevet i PL/PgSQL-sproget. Det virker ikke i almindelig SQL; EXECUTE
i almindelig SQL er helt anderledes, til at udføre forberedte sætninger. Du kan ikke bruge dynamisk SQL direkte i PostgreSQL's SQL-dialekt.
Sammenlign:
- PL/PgSQL'er
EXECUTE ... USING
; til - SQL's
EXECUTE
Se 2. sidste par i mit tidligere svar.
Ud over ikke at køre undtagen i PL/PgSQL er din SQL-sætning forkert, den vil ikke gøre, hvad du forventer. If (select id from ids where condition = some_condition)
returnerer siger 42
, ville sætningen mislykkes hvis id
er et heltal. Hvis det er castet til tekst, 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 er ugyldigt. Du vil faktisk have result_42_table
eller "result_42_table"
. Du bliver nødt til at skrive noget mere som:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... hvis du skal bruge quote_ident
.