sql >> Database >  >> RDS >> PostgreSQL

PL/pgSQL voor alles-in-één dynamische query

Kun je wat tabeldefinities en een voorbeeldquery posten van wat je probeert te doen? Ik weet niet 100% zeker wat je zoekt, maar er zijn een aantal vormen van "dynamische" SQL die gebruik maken van opgeslagen procedures/functies:

  1. Maak een functie die invoerparameters nodig heeft (d.w.z. categoryType, styleId, eventName, areaId) en plug die waarden in een "statisch" SQL-verzoek. Hier is een voorbeeld van een queryfragment voor uw geval:

Hier is een echt voorbeeld:

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. Bouw een tekenreeks met de SQL die u dynamisch wilt uitvoeren op basis van verschillende voorwaarden, parameterwaarden, enz. Dit is zo dynamisch als u kunt krijgen.

  2. Voer conditioneel verschillende "statische" SQL-instructies uit op basis van de waarden van uw invoerparameters.

Komt een van deze punten overeen met uw situatie?

PL/PGSQL is slechts de taal die wordt gebruikt om opgeslagen procedures/functies in Postgres te schrijven. Als je echt dynamische SQL-generatie nodig hebt, kun je het beste een functie schrijven met PL/PGSQL.

Een andere optie is om de gewenste SQL dynamisch in uw clienttoepassing te genereren en die SQL vervolgens rechtstreeks in te dienen om te worden uitgevoerd.



  1. Oracle SQL-query om rijen met niet-numerieke tekens uit te sluiten

  2. Databaseverbindingsreeks en sortering

  3. Installeer libpq-dev op Mac OS X

  4. Sorteer de $_POST variabelen