PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PL/pgSQL para consulta dinâmica tudo-em-um


Você pode postar algumas definições de tabela e uma consulta de amostra do que você está tentando fazer? Não tenho 100% de certeza do que você está procurando, mas existem algumas formas de SQL "dinâmico" usando procedimentos/funções armazenados:
  1. Crie uma função que receba parâmetros de entrada (ou seja, categoryType, styleId, eventName, areaId) e conecte esses valores a uma solicitação SQL "estática". Aqui está um snippet de consulta de amostra para seu caso:

Aqui está um exemplo 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. Construa uma string contendo o SQL que você deseja executar dinamicamente com base em diferentes condições, valores de parâmetros, etc. Isso é o mais dinâmico possível.

  2. Execute condicionalmente diferentes instruções SQL "estáticas" com base nos valores de seus parâmetros de entrada.

Alguma delas corresponde à sua situação?

PL/PGSQL é apenas a linguagem usada para escrever procedimentos/funções armazenadas no Postgres. Se você realmente precisa de geração dinâmica de SQL, então é melhor escrever uma função usando PL/PGSQL.

Outra opção, é gerar dinamicamente o SQL que você deseja em sua aplicação cliente e depois apenas enviar esse SQL diretamente para ser executado.