[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