Můžete prosím zveřejnit nějaké definice tabulek a ukázkový dotaz toho, co se snažíte udělat? Nejsem si 100% jistý, o co vám jde, ale existuje několik forem „dynamického“ SQL využívajícího uložené procedury/funkce:
- Vytvořte funkci, která přebírá vstupní parametry (tj. categoryType, styleId, eventName, areaId) a zapojte tyto hodnoty do „statického“ požadavku SQL. Zde je ukázkový fragment dotazu pro váš případ:
Zde je skutečný příklad:
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';
-
Sestavte řetězec obsahující SQL, který chcete dynamicky spouštět na základě různých podmínek, hodnot parametrů atd. Je to tak dynamické, jak jen můžete získat.
-
Podmíněně spouštějte různé „statické“ příkazy SQL na základě hodnot vašich vstupních parametrů.
Odpovídá některá z těchto situací vaší situaci?
PL/PGSQL je pouze jazyk používaný k psaní uložených procedur/funkcí v Postgresu. Pokud opravdu potřebujete dynamické generování SQL, pak je nejlepší napsat funkci pomocí PL/PGSQL.
Další možností je dynamicky vygenerovat SQL, který chcete ve své klientské aplikaci, a poté jej odeslat přímo ke spuštění.