sql >> Databáze >  >> RDS >> PostgreSQL

dynamický sql dotaz v postgresu

EXECUTE ... USING funguje pouze v PL/PgSQL - tedy v rámci funkcí nebo DO bloky napsané v jazyce PL/PgSQL. Nefunguje v prostém SQL; EXECUTE v prostém SQL je to úplně jiné, pro provádění připravených příkazů. Dynamické SQL nemůžete používat přímo v dialektu SQL PostgreSQL.

Porovnejte:

  • EXECUTE ... USING PL/PgSQL; do
  • EXECUTE SQL

Viz 2. poslední par v mé předchozí odpovědi.

Kromě toho, že neběží kromě PL/PgSQL, váš SQL příkaz je špatný, nebude dělat to, co očekáváte. If (select id from ids where condition = some_condition) vrátí hodnotu 42 , příkaz by selhal, pokud by id je celé číslo. Pokud se přenese do textu, dostanete:

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 je neplatné. Ve skutečnosti chcete result_42_table nebo "result_42_table" . Musel bys napsat něco víc jako:

EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))

... pokud musíte použít quote_ident .



  1. 5 funkcí pro extrakci čísla týdne z data v MariaDB

  2. Vylepšení Service Broker v SQL Server 2016

  3. Jak načíst dvě odezvy Json Json Object a Array

  4. Přesunutí existující tabulky z primární skupiny souborů do jiné skupiny souborů