[firebase-br] Ajuda Stored Procedure

Itauto CPD cpd em itauto.com.br
Ter Jul 12 08:44:23 -03 2016


Exemplo Rápido ... Não sei se é certo essa forma . ate acho que talvez 
tinha visto algo que o pessoal andou comentando, que vc montar com blobs 
, consumia muita memória do servidor . mais esta ai pra e funciona .


SET TERM ^ ;

create or alter procedure PROC_001 (
     PAR_CODEMP CODTRA,
     PAR_DTI DATA,
     PAR_DTF DATA,
     PAR_CODTDC_IN varchar(200),
     PAR_CODORI_IN varchar(200))
returns (
     CODEMP CODTRA,
     ANO smallint,
     MES01 MOEDA15_2,
     MES02 MOEDA15_2,
     MES03 MOEDA15_2,
     MES04 MOEDA15_2,
     MES05 MOEDA15_2,
     MES06 MOEDA15_2,
     MES07 MOEDA15_2,
     MES08 MOEDA15_2,
     MES09 MOEDA15_2,
     MES10 MOEDA15_2,
     MES11 MOEDA15_2,
     MES12 MOEDA15_2)
as
declare variable V_EMP CODTRA;
declare variable V_ANO smallint;
declare variable V_MES smallint;
declare variable V_VALOR MOEDA15_2;
declare variable SQL_TEXTO blob sub_type 1 segment size 80;
begin


   SQL_TEXTO = 'SELECT A.CODEMPRESA, EXTRACT(YEAR FROM A.DTVENC) ANO';
   SQL_TEXTO = SQL_TEXTO || ' FROM CONTASREC A';
   SQL_TEXTO = SQL_TEXTO || ' WHERE A.STATUS IN 
('||'''A'''||','||'''P'''||')';

   IF (TRIM(:PAR_CODTDC_IN) <> '') THEN
   SQL_TEXTO = SQL_TEXTO || ' AND A.CODTDC '||TRIM(:PAR_CODTDC_IN);

   IF (TRIM(:PAR_CODORI_IN) <> '') THEN
   SQL_TEXTO = SQL_TEXTO || ' AND A.CODORI '||TRIM(:PAR_CODORI_IN);

   IF (TRIM(:PAR_CODEMP) <> '') THEN
   SQL_TEXTO = SQL_TEXTO || ' AND A.CODEMP = '||''''||:PAR_CODEMP||'''';

   SQL_TEXTO = SQL_TEXTO || ' AND A.DTVENC >= ' || '''' || :PAR_DTI || 
'''' ||' AND A.DTVENC <= ' || '''' || :PAR_DTF || '''';
   SQL_TEXTO = SQL_TEXTO || ' GROUP BY A.CODEMPRESA, EXTRACT(YEAR FROM 
A.DTVENC)';
   SQL_TEXTO = SQL_TEXTO || ' ORDER BY A.CODEMPRESA, EXTRACT(YEAR FROM 
A.DTVENC)';

   EXECUTE STATEMENT SQL_TEXTO
   INTO :V_EMP, :V_ANO

SET TERM ; ^




Em 12/07/2016 07:15, Kelver Merlotti escreveu:
> Mas você pode fazer como "no seu programa", montando uma string e usando o
> Execute Statement ;)
> http://www.firebirdsql.org/refdocs/langrefupd20-psql-execstat.html#langrefupd20-psql-execstat-multirow
>
> []'s,
> KM
>
> 2016-07-12 0:35 GMT-03:00 Adilson B. Cápua Jr. <juniorcapua em gmail.com>:
>
>> PessoALL,
>>
>> Veja o seguinte trecho de uma SP:
>>
>>          FOR SELECT CAMPOX, CAMPOY, CAMPOZ
>>              FROM TABELA
>>              WHERE
>>                    CAMPOX = :PARAMETRO_1 AND
>>                    CAMPOY = :PARAMETRO_2 AND
>>                    CAMPOZ = :PARAMETRO_3
>>              INTO :VAR1, :VAR2. :VAR3 DO
>>              BEGIN
>>                         ...
>>              END
>>
>> Agora imagine que PARAMETRO_1, PARAMETRO_2 e PARAMETRO_3 é opcional, ou
>> seja,
>> se vier diferente de 0, significa que tenho que usá-lo, caso contrário não!
>>
>> Como fazer isso de uma forma "elegante"?
>>
>> Hoje eu tenho que repetir várias vezes de acordo com o parâmetro. Tipo
>> assim:
>>
>> IF (PARAMETRO_1 = 0) THEN
>> BEGIN
>>    IF (PARAMETRO_2 = 0) THEN
>>     BEGIN
>>        IF (PARAMETRO_3 = 0) THEN
>>         BEGIN
>>             (((QUERY DESCARTANDO TODOS PARAMETROS)))
>>         END
>>
>>      IF (PARAMETRO_3 <> 0) THEN
>>         BEGIN
>>             (((QUERY USANDO SOMENTE PARAMETRO_3)))
>>         END
>>     END
>> END
>>
>> Minhas SP's estão ficando gigantescas! Se fosse dentro do meu programa, era
>> mole. Eu ia montando a query de acordo com a consulta. Agora dentro de
>> Storeds Procedures que estou meio que perdido!
>>
>> Qualquer ajuda é bem vinda!
>>
>> Ah... Usando Firebird 2.5!
>>
>> Um abraço!
>>
>> _____________________________________
>>    Adilson Bragança Cápua Jr.
>>    Linhares - ES                            Brasil
>>
>>    Mail:* juniorcapua em me.com <juniorcapua em me.com>*
>> *          juniorcapua em gmail.com <juniorcapua em gmail.com>*
>> *          juniorcapua em yahoo.com.br <juniorcapua em yahoo.com.br>*
>>    Messenger:* juniorcapua em live.com <juniorcapua em live.com>*
>>    Skype:* dellas_capua*
>>    Blogger: http://dellasnoites.blogspot.com/
>> _____________________________________
>> "Save a tree! Send an e-mail!"
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas:
>> http://www.firebase.com.br/pesquisa_lista.html
>>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html


---
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus





Mais detalhes sobre a lista de discussão lista