PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

динамична sql заявка в postgres

EXECUTE ... USING работи само в PL/PgSQL - т.е. в рамките на функции или DO блокове, написани на езика PL/PgSQL. Не работи в обикновен SQL; EXECUTE в обикновен SQL е напълно различен за изпълнение на подготвени оператори. Не можете да използвате динамичен SQL директно в SQL диалекта на PostgreSQL.

Сравнете:

  • PL/PgSQL EXECUTE ... USING; до
  • EXECUTE на SQL

Вижте 2-ри последен параграф в предишния ми отговор.

Освен че не работи освен в PL/PgSQL, вашият SQL израз е грешен, той няма да направи това, което очаквате. Ако (select id from ids where condition = some_condition) връща, кажете 42 , изразът ще се провали, ако id е цяло число. Ако е прехвърлен към текст, ще получите:

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

Това е невалидно. Всъщност искате result_42_table или "result_42_table" . Трябва да напишете нещо повече като:

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

... ако трябва да използвате 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. Използване на корелационната функция на PostgreSQL

  2. Изчислете броя на едновременните събития в SQL

  3. Как да архивирате и възстановите PostgreSQL база данни чрез DBeaver

  4. Postgres се проваля с „не може да се отвори файлът за съпоставяне на релации global/pg_filenode.map“

  5. Вмъкване на текстов низ с шестнадесетичен в PostgreSQL като байт