sql >> Base de Datos >  >> RDS >> PostgreSQL

PL/pgSQL para consultas dinámicas todo en uno

¿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:

  1. 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';
  1. 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.

  2. 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.