Kan du sende nogle tabeldefinitioner og et eksempel på, hvad du prøver at gøre? Jeg er ikke 100 % sikker på, hvad du leder efter, men der er et par former for "dynamisk" SQL, der bruger lagrede procedurer/funktioner:
- Opret en funktion, der tager inputparametre (dvs. kategoriType, styleId, eventName, areaId), og sæt disse værdier ind i en "statisk" SQL-anmodning. Her er et eksempel på et forespørgselsuddrag til din sag:
Her er et rigtigt eksempel:
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';
-
Byg en streng, der indeholder den SQL, du vil udføre dynamisk baseret på forskellige betingelser, parameterværdier osv. Dette er så dynamisk, som du kan blive.
-
Kør betinget forskellige "statiske" SQL-sætninger baseret på værdierne af dine inputparametre.
Passer nogen af disse til din situation?
PL/PGSQL er blot det sprog, der bruges til at skrive lagrede procedurer/funktioner i Postgres. Hvis du virkelig har brug for dynamisk SQL-generering, er det bedst at skrive en funktion ved hjælp af PL/PGSQL.
En anden mulighed er dynamisk at generere den SQL, du ønsker i din klientapplikation, og derefter blot indsende den SQL direkte for at blive eksekveret.