[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