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

PL/pgSQL til alt-i-én dynamisk forespørgsel

Kan du sende nogle tabeldefinitioner og et eksempel på, hvad du prøver at gøre? Jeg er ikke 100 % sikker på, hvad du leder efter, men der er et par former for "dynamisk" SQL, der bruger lagrede procedurer/funktioner:

  1. Opret en funktion, der tager inputparametre (dvs. kategoriType, styleId, eventName, areaId), og sæt disse værdier ind i en "statisk" SQL-anmodning. Her er et eksempel på et forespørgselsuddrag til din sag:

Her er et rigtigt eksempel:

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. Byg en streng, der indeholder den SQL, du vil udføre dynamisk baseret på forskellige betingelser, parameterværdier osv. Dette er så dynamisk, som du kan blive.

  2. Kør betinget forskellige "statiske" SQL-sætninger baseret på værdierne af dine inputparametre.

Passer nogen af ​​disse til din situation?

PL/PGSQL er blot det sprog, der bruges til at skrive lagrede procedurer/funktioner i Postgres. Hvis du virkelig har brug for dynamisk SQL-generering, er det bedst at skrive en funktion ved hjælp af PL/PGSQL.

En anden mulighed er dynamisk at generere den SQL, du ønsker i din klientapplikation, og derefter blot indsende den SQL direkte for at blive eksekveret.



  1. Hvordan MID() virker i MariaDB

  2. Oracle Database Link - MySQL-ækvivalent?

  3. Få billede fra MySQL til tableWidget i PyQt5

  4. Sådan transponeres rækker til kolonner baseret på tidsintervaller i MYSQL