ORACLE - Retornar somas em uma procedure
29/08/2018
0
Boa tarde pessoal,
estou com dificuldades para criar uma procedure no oracle. Faz tempo que não mexo com oracle e conheço apenas os blocos anônimos, segue um exemplo da procedure que estou precisando, porém a sintaxe é firebird.
estou com dificuldades para criar uma procedure no oracle. Faz tempo que não mexo com oracle e conheço apenas os blocos anônimos, segue um exemplo da procedure que estou precisando, porém a sintaxe é firebird.
SET TERM ^ ; CREATE PROCEDURE STP_CUPOM_DIVERGENTE ( pi_data_inicio date, --parâmetro de entrada pi_data_fim date) returns ( po_loja integer, --parâmetro de saida po_pdv integer, po_coo integer, po_produtos double precision, po_financeiro double precision, po_troco double precision, po_diferenca double precision) as declare variable pv_loja integer; --variaveis declare variable pv_pdv integer; declare variable pv_coo integer; declare variable pv_produtos double precision; declare variable pv_financeiro double precision; declare variable pv_troco double precision; begin for select R04.I_LOJA, R01.S_ECF, R04.S_COO from R04 left join R01 on R04.ID_R01 = R01.ID left join R05 on R04.ID = R05.ID_R04 where R04.D_DATA_INICIO_EMISSAO between :PI_DATA_INICIO and :PI_DATA_FIM group by R04.I_LOJA, R01.S_ECF, R04.S_COO into :PV_LOJA, :PV_PDV, :PV_COO do begin select COALESCE(sum(R05.R_VALOR_TOTAL_LIQUIDO),0) as VAL_PRODUTOS from R05 left join R04 on R05.ID_R04 = R04.ID left join R01 on R04.ID_R01 = R01.ID where R05.B_CANCEL_CUPOM = 0 and R04.S_COO = :PV_COO and r05.s_indicador_cancelamento = ''N'' and R04.I_LOJA = :PV_LOJA and R01.S_ECF = :PV_PDV and R04.D_DATA_INICIO_EMISSAO between :PI_DATA_INICIO and :PI_DATA_FIM into :PV_PRODUTOS ; select COALESCE(sum(R07.R_VALPAGTO),0) from R07 left join R04 on R07.ID_R04 = R04.ID left join R01 on R04.ID_R01 = R01.ID where R07.B_CANCEL_CUPOM = 0 and R04.S_COO = :PV_COO and R04.I_LOJA = :PV_LOJA and R01.S_ECF = :PV_PDV and R04.D_DATA_INICIO_EMISSAO between :PI_DATA_INICIO and :PI_DATA_FIM into :PV_FINANCEIRO ; select COALESCE(abs(sum(R07.R_VALPAGTO)),0) from R07 left join R04 on R07.ID_R04 = R04.ID left join R01 on R04.ID_R01 = R01.ID where R07.B_CANCEL_CUPOM = 0 and R04.S_COO = :PV_COO and R04.I_LOJA = :PV_LOJA and R01.S_ECF = :PV_PDV and R07.R_VALPAGTO < 0 and R04.D_DATA_INICIO_EMISSAO between :PI_DATA_INICIO and :PI_DATA_FIM into :PV_TROCO; PO_LOJA = :PV_LOJA; PO_PDV = :PV_PDV; PO_COO = :PV_COO; PO_PRODUTOS = :PV_PRODUTOS; PO_FINANCEIRO = :PV_FINANCEIRO; PO_TROCO = :PV_TROCO; po_diferenca = :pv_produtos - :pv_financeiro; suspend ; end end^ SET TERM ; ^
Johnny
Curtir tópico
+ 0
Responder
Post mais votado
31/08/2018
Olá, Johnny.
Que bacana, cara! Muito bom você compartilhar sua solução pois poderá ser a dúvida de outras pessoas também!
Abraço!
Que bacana, cara! Muito bom você compartilhar sua solução pois poderá ser a dúvida de outras pessoas também!
Abraço!
Santos
Responder
Mais Posts
30/08/2018
Johnny
Já resolvi usando um bloco anônimo.
declare pv_produtos double precision; pv_financeiro double precision; pv_troco double precision; pv_pdiferenca double precision; begin for rec in ( SELECT DISTINCT DET_FILIAL, DET_NR_PDV, DET_NR_CUPOM FROM DETCUPOM WHERE DET_FILIAL = 7 AND DET_DATA BETWEEN DATETO_RMS7(:data) AND DATETO_RMS7(:data2) ) loop SELECT COALESCE(SUM(DET_TOTAL),0) into pv_produtos FROM DETCUPOM WHERE DET_FILIAL = rec.det_filial AND DET_CANCELADO = 'N' AND det_nr_pdv = rec.det_nr_pdv AND det_nr_cupom = rec.det_nr_cupom; SELECT SUM(COALESCE(DETP_VLR_PGTO,0) - COALESCE(DETT_VLR_TROCO,0)) into pv_financeiro FROM DETCUPOMP1 LEFT JOIN DETCUPOMT1 ON DETCUPOMP1.DETP_FILIAL = DETCUPOMT1.DETT_FILIAL AND DETCUPOMP1.DETP_NR_PDV = DETCUPOMT1.DETT_NR_PDV AND DETCUPOMP1.DETP_NR_CUPOM = DETCUPOMT1.DETT_NR_CUPOM AND DETCUPOMP1.DETP_SEQ = DETCUPOMT1.DETT_SEQ WHERE DETP_FILIAL = rec.det_filial AND DETP_CANCELADO = 'N' AND detp_nr_pdv = rec.det_nr_pdv AND detp_nr_cupom = rec.det_nr_cupom; SELECT COALESCE(SUM(DETT_VLR_TROCO),0) into pv_troco FROM DETCUPOMT1 WHERE DETT_FILIAL = rec.det_filial AND DETT_CANCELADO = 'N' AND dett_nr_pdv = rec.det_nr_pdv AND dett_nr_cupom = rec.det_nr_cupom; insert into tab_cupom_divergencia (loja, pdv, coo, produtos, financeiro, troco, diferenca) values (rec.det_filial, rec.det_nr_pdv, rec.det_nr_cupom, pv_produtos, pv_financeiro, pv_troco, pv_produtos - pv_financeiro); end loop; end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)