PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PL/pgSQL pour une requête dynamique tout-en-un

Pouvez-vous s'il vous plaît poster quelques définitions de table et un exemple de requête de ce que vous essayez de faire? Je ne suis pas sûr à 100 % de ce que vous recherchez, mais il existe quelques formes de SQL "dynamique" utilisant des procédures/fonctions stockées :

  1. Créez une fonction qui prend des paramètres d'entrée (c'est-à-dire categoryType, styleId, eventName, areaId) et branchez ces valeurs dans une requête SQL "statique". Voici un exemple d'extrait de requête pour votre cas :

Voici un exemple concret :

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. Créez une chaîne contenant le SQL que vous souhaitez exécuter dynamiquement en fonction de différentes conditions, valeurs de paramètres, etc. C'est aussi dynamique que possible.

  2. Exécutez conditionnellement différentes instructions SQL "statiques" en fonction des valeurs de vos paramètres d'entrée.

Est-ce que l'un d'entre eux correspond à votre situation ?

PL/PGSQL n'est que le langage utilisé pour écrire des procédures/fonctions stockées dans Postgres. Si vous avez vraiment besoin d'une génération SQL dynamique, le mieux serait d'écrire une fonction en utilisant PL/PGSQL.

Une autre option consiste à générer dynamiquement le SQL que vous souhaitez dans votre application cliente, puis à soumettre directement ce SQL pour qu'il soit exécuté.