sql >> Database teknologi >  >> RDS >> PostgreSQL

dynamisk sql-forespørgsel i postgres

EXECUTE ... USING virker kun i PL/PgSQL - altså indenfor funktioner eller DO blokke skrevet i PL/PgSQL-sproget. Det virker ikke i almindelig SQL; EXECUTE i almindelig SQL er helt anderledes, til at udføre forberedte sætninger. Du kan ikke bruge dynamisk SQL direkte i PostgreSQL's SQL-dialekt.

Sammenlign:

  • PL/PgSQL'er EXECUTE ... USING; til
  • SQL's EXECUTE

Se 2. sidste par i mit tidligere svar.

Ud over ikke at køre undtagen i PL/PgSQL er din SQL-sætning forkert, den vil ikke gøre, hvad du forventer. If (select id from ids where condition = some_condition) returnerer siger 42 , ville sætningen mislykkes hvis id er et heltal. Hvis det er castet til tekst, 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 er ugyldigt. Du vil faktisk have result_42_table eller "result_42_table" . Du bliver nødt til at skrive noget mere som:

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

... hvis du skal bruge quote_ident .



  1. Brug af ODBC med Salesforce og Active Directory Federation Services (ADFS) Single Sign On (SSO)

  2. Hvordan søger man efter skråstreg (\) i MySQL? og hvorfor escape (\) ikke påkrævet for hvor (=), men for Like er påkrævet?

  3. Validering af dine PostgreSQL-sikkerhedskopier på Docker

  4. Oracle datosammenligning brudt på grund af sommertid