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

PL/pgSQL за динамична заявка "всичко в едно".

Можете ли да публикувате някои дефиниции на таблици и примерна заявка за това, което се опитвате да направите? Не съм 100% сигурен какво търсите, но има няколко форми на „динамичен“ SQL, използващ съхранени процедури/функции:

  1. Създайте функция, която приема входни параметри (т.е. categoryType, styleId, eventName, areaId) и включете тези стойности в „статична“ SQL заявка. Ето примерен фрагмент от заявка за вашия случай:

Ето един реален пример:

CREATE OR REPLACE FUNCTION SP_IGLGetItem(
    pItemId INTEGER
) 
RETURNS TABLE(
    ItemId INTEGER,
    ItemName VARCHAR(100),
    ItemCategory CHAR(2) 
AS
$$
BEGIN
    RETURN QUERY
    SELECT i.ItemId, i.ItemName, i.ItemCategory
    FROM Item i
    WHERE (i.ItemId = pItemId OR pItemId IS NULL) -- Return single item (if specified, otherwise return all)
    ;
END;
$$
LANGUAGE 'plpgsql';
  1. Създайте низ, съдържащ SQL, който искате да изпълните динамично въз основа на различни условия, стойности на параметри и т.н. Това е възможно най-динамично.

  2. Изпълнявайте условно различни „статични“ SQL изрази въз основа на стойностите на вашите входни параметри.

Някое от тях отговаря ли на вашата ситуация?

PL/PGSQL е само езикът, използван за писане на съхранени процедури/функции в Postgres. Ако наистина се нуждаете от динамично генериране на SQL, тогава най-добре е да напишете функция, използвайки PL/PGSQL.

Друг вариант е да генерирате динамично SQL, който искате във вашето клиентско приложение, и след това просто да изпратите този SQL директно за изпълнение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql изберете най-ранната дата за множество редове

  2. Как да вмъкнете външен ключ в модел на секвелизиране

  3. Как да тествам моя ad-hoc SQL с параметри в прозореца за заявка на Postgres

  4. Какъв точно оператор за сравнение между `bigint` и `date` в postgresql?

  5. Грешка в сървъра на OpenERP Достъпът е отказан