Können Sie bitte einige Tabellendefinitionen und eine Beispielabfrage für das, was Sie versuchen, posten? Ich bin mir nicht 100 % sicher, wonach Sie suchen, aber es gibt ein paar Formen von "dynamischem" SQL, die gespeicherte Prozeduren/Funktionen verwenden:
- Erstellen Sie eine Funktion, die Eingabeparameter (z. B. categoryType, styleId, eventName, areaId) übernimmt, und fügen Sie diese Werte in eine "statische" SQL-Anforderung ein. Hier ist ein Beispiel für ein Abfrage-Snippet für Ihren Fall:
Hier ist ein echtes Beispiel:
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';
-
Erstellen Sie eine Zeichenfolge, die die SQL enthält, die Sie dynamisch basierend auf verschiedenen Bedingungen, Parameterwerten usw. ausführen möchten. Dies ist so dynamisch wie möglich.
-
Führen Sie bedingt verschiedene "statische" SQL-Anweisungen basierend auf den Werten Ihrer Eingabeparameter aus.
Passt irgendetwas davon zu Ihrer Situation?
PL/PGSQL ist nur die Sprache, die zum Schreiben gespeicherter Prozeduren/Funktionen in Postgres verwendet wird. Wenn Sie wirklich eine dynamische SQL-Generierung benötigen, schreiben Sie am besten eine Funktion mit PL/PGSQL.
Eine andere Möglichkeit besteht darin, das gewünschte SQL dynamisch in Ihrer Client-Anwendung zu generieren und dieses SQL dann direkt zur Ausführung zu übermitteln.