Можете ли да публикувате някои дефиниции на таблици и примерна заявка за това, което се опитвате да направите? Не съм 100% сигурен какво търсите, но има няколко форми на „динамичен“ SQL, използващ съхранени процедури/функции:
- Създайте функция, която приема входни параметри (т.е. 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';
-
Създайте низ, съдържащ SQL, който искате да изпълните динамично въз основа на различни условия, стойности на параметри и т.н. Това е възможно най-динамично.
-
Изпълнявайте условно различни „статични“ SQL изрази въз основа на стойностите на вашите входни параметри.
Някое от тях отговаря ли на вашата ситуация?
PL/PGSQL е само езикът, използван за писане на съхранени процедури/функции в Postgres. Ако наистина се нуждаете от динамично генериране на SQL, тогава най-добре е да напишете функция, използвайки PL/PGSQL.
Друг вариант е да генерирате динамично SQL, който искате във вашето клиентско приложение, и след това просто да изпратите този SQL директно за изпълнение.