sql >> Databáze >  >> RDS >> PostgreSQL

PL/pgSQL pro dynamický dotaz vše v jednom

Můžete prosím zveřejnit nějaké definice tabulek a ukázkový dotaz toho, co se snažíte udělat? Nejsem si 100% jistý, o co vám jde, ale existuje několik forem „dynamického“ SQL využívajícího uložené procedury/funkce:

  1. Vytvořte funkci, která přebírá vstupní parametry (tj. categoryType, styleId, eventName, areaId) a zapojte tyto hodnoty do „statického“ požadavku SQL. Zde je ukázkový fragment dotazu pro váš případ:

Zde je skutečný příklad:

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. Sestavte řetězec obsahující SQL, který chcete dynamicky spouštět na základě různých podmínek, hodnot parametrů atd. Je to tak dynamické, jak jen můžete získat.

  2. Podmíněně spouštějte různé „statické“ příkazy SQL na základě hodnot vašich vstupních parametrů.

Odpovídá některá z těchto situací vaší situaci?

PL/PGSQL je pouze jazyk používaný k psaní uložených procedur/funkcí v Postgresu. Pokud opravdu potřebujete dynamické generování SQL, pak je nejlepší napsat funkci pomocí PL/PGSQL.

Další možností je dynamicky vygenerovat SQL, který chcete ve své klientské aplikaci, a poté jej odeslat přímo ke spuštění.



  1. SQLite Přejmenovat sloupec

  2. VLOŽTE HODNOTY KAM NEEXISTUJE

  3. Zkontrolujte omezení pro mysql

  4. Získávání výsledků dotazu z tabulek 2 db, i když druhá tabulka nemá žádné odpovídající položky