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