PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PL/pgSQL per query dinamiche all-in-one

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:

  1. 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';
  1. Crea una stringa contenente l'SQL che desideri eseguire dinamicamente in base a diverse condizioni, valori dei parametri, ecc. Questo è il più dinamico possibile.

  2. 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.