sql >> Database >  >> RDS >> PostgreSQL

dynamische sql-query in postgres

EXECUTE ... USING werkt alleen in PL/PgSQL - dwz binnen functies of DO blokken geschreven in de PL/PgSQL-taal. Het werkt niet in gewone SQL; de EXECUTE in gewone SQL is heel anders, voor het uitvoeren van voorbereide instructies. U kunt dynamische SQL niet rechtstreeks in het SQL-dialect van PostgreSQL gebruiken.

Vergelijk:

  • PL/PgSQL's EXECUTE ... USING; naar
  • SQL's EXECUTE

Zie de 2e laatste par in mijn eerdere antwoord.

Behalve dat het niet werkt, behalve in PL/PgSQL, is uw SQL-statement verkeerd, het zal niet doen wat u verwacht. If (select id from ids where condition = some_condition) retourneert zeg 42 , zou de instructie mislukken als id is een geheel getal. Als het naar tekst wordt gecast, krijg je:

EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';

Dat is ongeldig. U wilt eigenlijk result_42_table of "result_42_table" . Je zou iets meer moeten schrijven als:

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

... als je quote_ident moet gebruiken .



  1. MySQL-query / uitvoeringsvolgorde van de clausule

  2. Wachtgebeurtenissen SQL Server -3

  3. SQL is gelijk aan (=) Operator voor beginners

  4. SQL - Hoe een rij te selecteren met een kolom met maximale waarde