¿Puede publicar algunas definiciones de tabla y una consulta de muestra de lo que está tratando de hacer? No estoy 100% seguro de lo que busca, pero hay un par de formas de SQL "dinámico" que usan funciones/procedimientos almacenados:
- Cree una función que tome parámetros de entrada (es decir, tipo de categoría, ID de estilo, nombre de evento, ID de área) y conecte esos valores en una solicitud de SQL "estática". Aquí hay un fragmento de consulta de muestra para su caso:
He aquí un ejemplo real:
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';
-
Cree una cadena que contenga el SQL que desea ejecutar dinámicamente en función de diferentes condiciones, valores de parámetros, etc. Esto es lo más dinámico posible.
-
Ejecute condicionalmente diferentes sentencias SQL "estáticas" basadas en los valores de sus parámetros de entrada.
¿Alguno de estos coincide con su situación?
PL/PGSQL es solo el lenguaje utilizado para escribir funciones/procedimientos almacenados en Postgres. Si realmente necesita la generación dinámica de SQL, lo mejor que puede hacer es escribir una función usando PL/PGSQL.
Otra opción es generar dinámicamente el SQL que desea en su aplicación cliente y luego simplemente enviar ese SQL directamente para que se ejecute.