EXECUTE ... USING
działa tylko w PL/PgSQL - tj. w ramach funkcji lub DO
bloki napisane w języku PL/PgSQL. Nie działa w zwykłym SQL; EXECUTE
w zwykłym SQL jest zupełnie inny, do wykonywania przygotowanych instrukcji. Nie możesz używać dynamicznego SQL bezpośrednio w dialekcie SQL PostgreSQL.
Porównaj:
- Plik PL/PgSQL
EXECUTE ... USING
; do EXECUTE
SQL
Zobacz drugi ostatni paragraf w mojej poprzedniej odpowiedzi.
Oprócz tego, że nie działa, z wyjątkiem PL/PgSQL, twoja instrukcja SQL jest błędna, nie zrobi tego, czego oczekujesz. If (select id from ids where condition = some_condition)
zwraca powiedz 42
, instrukcja nie powiedzie się, jeśli id
jest liczbą całkowitą. Jeśli zostanie przesłany na tekst, otrzymasz:
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 jest nieprawidłowe. Właściwie chcesz result_42_table
lub "result_42_table"
. Trzeba by napisać coś więcej w stylu:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... jeśli musisz użyć quote_ident
.