EXECUTE ... USING
работи само в PL/PgSQL - т.е. в рамките на функции или DO
блокове, написани на езика PL/PgSQL. Не работи в обикновен SQL; EXECUTE
в обикновен SQL е напълно различен за изпълнение на подготвени оператори. Не можете да използвате динамичен SQL директно в SQL диалекта на PostgreSQL.
Сравнете:
- PL/PgSQL
EXECUTE ... USING
; до EXECUTE
на SQL
Вижте 2-ри последен параграф в предишния ми отговор.
Освен че не работи освен в PL/PgSQL, вашият SQL израз е грешен, той няма да направи това, което очаквате. Ако (select id from ids where condition = some_condition)
връща, кажете 42
, изразът ще се провали, ако id
е цяло число. Ако е прехвърлен към текст, ще получите:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Това е невалидно. Всъщност искате result_42_table
или "result_42_table"
. Трябва да напишете нещо повече като:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... ако трябва да използвате quote_ident
.