Kan du posta några tabelldefinitioner och ett exempel på vad du försöker göra? Jag är inte 100% säker på vad du är ute efter, men det finns ett par former av "dynamisk" SQL som använder lagrade procedurer/funktioner:
- Skapa en funktion som tar indataparametrar (d.v.s. kategoriTyp, styleId, eventName, areaId) och koppla in dessa värden till en "statisk" SQL-begäran. Här är ett exempel på frågekodavsnitt för ditt fall:
Här är ett riktigt exempel:
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';
-
Bygg en sträng som innehåller den SQL du vill köra dynamiskt baserat på olika villkor, parametervärden etc. Detta är så dynamiskt du kan bli.
-
Kör villkorligt olika "statiska" SQL-satser baserat på värdena för dina inmatningsparametrar.
Stämmer något av dessa med din situation?
PL/PGSQL är bara det språk som används för att skriva lagrade procedurer/funktioner i Postgres. Om du verkligen behöver dynamisk SQL-generering, är det bäst att skriva en funktion med PL/PGSQL.
Ett annat alternativ är att dynamiskt generera den SQL du vill ha i din klientapplikation och sedan bara skicka in den SQL direkt för att köras.