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 :
- 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';
-
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.
-
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é.