PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

dynamiczne zapytanie sql w postgresie

EXECUTE ... USING działa tylko w PL/PgSQL - tj. w ramach funkcji lub DO bloki napisane w języku PL/PgSQL. Nie działa w zwykłym SQL; EXECUTE w zwykłym SQL jest zupełnie inny, do wykonywania przygotowanych instrukcji. Nie możesz używać dynamicznego SQL bezpośrednio w dialekcie SQL PostgreSQL.

Porównaj:

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

Zobacz drugi ostatni paragraf w mojej poprzedniej odpowiedzi.

Oprócz tego, że nie działa, z wyjątkiem PL/PgSQL, twoja instrukcja SQL jest błędna, nie zrobi tego, czego oczekujesz. If (select id from ids where condition = some_condition) zwraca powiedz 42 , instrukcja nie powiedzie się, jeśli id jest liczbą całkowitą. Jeśli zostanie przesłany na tekst, otrzymasz:

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 jest nieprawidłowe. Właściwie chcesz result_42_table lub "result_42_table" . Trzeba by napisać coś więcej w stylu:

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

... jeśli musisz użyć quote_ident .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ograniczenie NOT NULL na zbiorze kolumn

  2. Jak zaktualizować wybrane wiersze wartościami z pliku CSV w Postgresie?

  3. Jaka jest różnica między postgres a postgresql_psycopg2 jako silnikiem bazy danych dla django?

  4. PostgreSQL:Jak ustawić search_path na poziomie użytkownika?

  5. Jak dodać liczbę dni w postgresql datetime