Czy możesz opublikować kilka definicji tabel i przykładowe zapytanie dotyczące tego, co próbujesz zrobić? Nie jestem w 100% pewien, czego szukasz, ale istnieje kilka form „dynamicznego” SQL przy użyciu procedur/funkcji składowanych:
- Utwórz funkcję, która pobiera parametry wejściowe (tj. categoryType, styleId, eventName, areaId) i wstawia te wartości do „statycznego” żądania SQL. Oto przykładowy fragment zapytania dla Twojej sprawy:
Oto prawdziwy przykład:
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';
-
Zbuduj ciąg znaków zawierający kod SQL, który chcesz wykonać dynamicznie w oparciu o różne warunki, wartości parametrów itp. Jest to tak dynamiczne, jak to tylko możliwe.
-
Warunkowo uruchamiaj różne „statyczne” instrukcje SQL na podstawie wartości parametrów wejściowych.
Czy któreś z nich pasuje do Twojej sytuacji?
PL/PGSQL to tylko język używany do pisania procedur/funkcji składowanych w Postgresie. Jeśli naprawdę potrzebujesz dynamicznego generowania SQL, najlepiej jest napisać funkcję używając PL/PGSQL.
Inną opcją jest dynamiczne generowanie kodu SQL, który chcesz w aplikacji klienckiej, a następnie przesłanie tego kodu SQL bezpośrednio do wykonania.