[firebase-br] Digest lista, volume 924, assunto 1
paulosxs Yahoo!
paulosxs em yahoo.com.br
Qua Abr 4 15:21:31 -03 2007
Rodrigo A. de Freitas escreveu:
>
>Alguém sabe se é possível e como se cria um select dinâmico em uma stored
>procedure ? Deixe-me exemplificar:
>
>Eu estou preparando uma SP para utilizar em um relatório, e o meu SELECT
>deve ser alterado em função de um parâmetro. Assim:
Prezado Rodrigo,
Não tenho muita experiência em FirebirdSQL, mas tenho uma boa experiência com várias linguagens de programação e outros SGBDs.
Se o FirebirdSQL não foge à regra, comandos dinâmicos afetam o desempenho, por isso, salvo casos especiais, procuro evitá-los. Ou seja, sempre tento incorporar a regra ao processo e, assim, cada problema pede uma solução específica. No seu exemplo, eu faria o seguinte:
~~~~~~~~~~~~~~~~~~~~~~
CREATE PROCEDURE PR_RELATORIO (DATA_DE DATE,DATA_ATE DATE,TIPO_PARAMETRO INTEGER)
RETURNS(
CAMPO1 <TIPO>,
CAMPO2 <TIPO>,
CAMPO3 <TIPO>,
DATA_EMISSAO DATE,
DATA_VENCTO DATE,
DATA_ENTRADA DATE)
AS
DECLARE DATA_REF DATE;
BEGIN
FOR
SELECT CAMPO1, CAMPO2, CAMPO3, DATA_EMISSAO, DATA_VENCTO, DATA_ENTRADA
FROM TESTE
INTO :CAMPO1, :CAMPO2, :CAMPO3, :DATA_EMISSAO, :DATA_VENCTO, :DATA_ENTRADA
DO BEGIN
DATA_REF =
CASE TIPO_PARAMETRO
WHEN 1 THEN DATA_EMSSAO
WHEN 2 THEN DATA_VENCTO
WHEN 3 THEN DATA_ENTRADA
END;
IF DATA_REF BETWEEN DATA_DE AND DATA_ATE THEN SUSPEND;
END
END
~~~~~~~~~~~~~~~~~~~~~~
Mais detalhes sobre a lista de discussão lista