EXECUTE ... USING
funktioniert nur in PL/PgSQL - dh innerhalb von Funktionen oder DO
Blöcke, die in der Sprache PL/PgSQL geschrieben sind. Es funktioniert nicht in einfachem SQL; das EXECUTE
in einfachem SQL ist völlig anders, um vorbereitete Anweisungen auszuführen. Sie können dynamisches SQL nicht direkt im SQL-Dialekt von PostgreSQL verwenden.
Vergleichen Sie:
- PL/PgSQLs
EXECUTE ... USING
; zu - SQLs
EXECUTE
Siehe den vorletzten Absatz in meiner vorherigen Antwort.
Abgesehen davon, dass Ihre SQL-Anweisung nicht ausgeführt wird, außer in PL/PgSQL, ist sie falsch, sie wird nicht das tun, was Sie erwarten. If (select id from ids where condition = some_condition)
gibt beispielsweise 42
zurück , würde die Anweisung fehlschlagen, wenn id
ist eine ganze Zahl. Wenn es in Text umgewandelt wird, erhalten Sie:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Das ist ungültig. Sie wollen eigentlich result_42_table
oder "result_42_table"
. Sie müssten eher etwas schreiben wie:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... wenn Sie quote_ident
verwenden müssen .