[firebase-br] É possível montar selects dinâmicos em SPs ? (PauloSXS)

paulosxs Yahoo! paulosxs em yahoo.com.br
Qui Abr 5 10:34:55 -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

~~~~~~~~~~~~~~~~~~~~~~

*** Esta mensagem foi reenviada porque a anterior estava com o assunto 
errado.






Mais detalhes sobre a lista de discussão lista