sql >> Databasteknik >  >> RDS >> PostgreSQL

dynamisk sql-fråga i postgres

EXECUTE ... USING fungerar bara i PL/PgSQL - dvs inom funktioner eller DO block skrivna på PL/PgSQL-språket. Det fungerar inte i vanlig SQL; EXECUTE i vanlig SQL är helt annorlunda, för att köra förberedda satser. Du kan inte använda dynamisk SQL direkt i PostgreSQL:s SQL-dialekt.

Jämför:

  • PL/PgSQL:s EXECUTE ... USING; till
  • SQL:s EXECUTE

Se 2:a sista paret i mitt tidigare svar.

Förutom att inte köras förutom i PL/PgSQL är din SQL-sats fel, den kommer inte att göra vad du förväntar dig. If (select id from ids where condition = some_condition) returnerar säger 42 , skulle satsen misslyckas om id är ett heltal. Om det castas till text får du:

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

Det är ogiltigt. Du vill faktiskt ha result_42_table eller "result_42_table" . Du måste skriva något mer som:

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

... om du måste använda quote_ident .



  1. Anslut SQL Server till HubSpot CRM

  2. skillnaden mellan ON-klausul och att använda klausul i sql

  3. Stäng av begränsningar tillfälligt (MS SQL)

  4. Automatisk dataversionering i MariaDB Server 10.3