Puoi per favore pubblicare alcune definizioni di tabella e una query di esempio su ciò che stai cercando di fare? Non sono sicuro al 100% di cosa stai cercando, ma ci sono un paio di forme di SQL "dinamico" che utilizzano procedure/funzioni memorizzate:
- Crea una funzione che accetta i parametri di input (ad esempio categoryType, styleId, eventName, areaId) e collega quei valori a una richiesta SQL "statica". Ecco uno snippet di query di esempio per il tuo caso:
Ecco un esempio reale:
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';
-
Crea una stringa contenente l'SQL che desideri eseguire dinamicamente in base a diverse condizioni, valori dei parametri, ecc. Questo è il più dinamico possibile.
-
Esegui in modo condizionale diverse istruzioni SQL "statiche" in base ai valori dei parametri di input.
Qualcuno di questi corrisponde alla tua situazione?
PL/PGSQL è solo il linguaggio utilizzato per scrivere procedure/funzioni memorizzate in Postgres. Se hai davvero bisogno della generazione dinamica di SQL, allora la soluzione migliore sarebbe scrivere una funzione usando PL/PGSQL.
Un'altra opzione è generare dinamicamente l'SQL che desideri nell'applicazione client e quindi inviare semplicemente quell'SQL direttamente per essere eseguito.