- Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 10 anos, 2 meses atrás por rman.
-
AutorPosts
-
12 de setembro de 2014 às 8:56 pm #106961Tadeu Rodrigues de OliveiraParticipante
Meus caros, boa tarde.
Tenho uma stored procedure que gera uma tabela temporária que posteriormente será utilizada em um relatório.
Porém quando são passados os parâmetros de formato data a variável que guarda estes parâmetros os guarda com o ano no padrão de 2 digitos sendo que no BD estão armazenados o ano com 4 digitos e sendo assim não consegue loalizar os registros para impressão.
Não sei se me fiz entender por tanto segue abaixo o código da procedure.
create or replace procedure mgcli.al_p_rel_consmat (
pdt_ini in varchar2,
pdt_fin in varchar2,
usu_in_codigo in number,
comp_st_nome in varchar2,
pfil_in_codigo in number,
pgru_ide_st_codigo in varchar2,
palm_in_codigo_i in number,
palm_in_codigo_f in number,
ploc_in_codigo_i in number,
ploc_in_codigo_f in number,
pccf_in_reduzido_i in number,
pccf_in_reduzido_f in number,
pgru_in_codigo_i in number,
pgru_in_codigo_f in number,
ppro_in_codigo_i in number,
ppro_in_codigo_f in number
) isvdt_ini date := to_date(pdt_ini, 'dd/mm/yyyy');
vdt_fin date := to_date(pdt_fin, 'dd/mm/yyyy');
v_comp_st_nome varchar2(255) := comp_st_nome;
v_usu_in_codigo number := usu_in_codigo;
v_fil_in_codigo number := pfil_in_codigo;v_pro_tab_in_codigo number(3,0);
v_pro_pad_in_codigo number(3,0);
v_gru_ide_st_codigo varchar2(5);
v_ide_st_nome varchar2(100);
v_gru_in_codigo number(6,0);
v_gru_st_nome varchar2(100);
v_pro_in_codigo number(7,0);
v_alm_in_codigo number(3,0);
v_alm_st_almoxar varchar2(100);
v_loc_in_codigo number(6,0);
v_loc_st_nome varchar2(100);
v_ccf_in_reduzido number(6,0);
v_cus_st_descricao varchar2(100);
v_esp_re_qtminimo number(15,3);
v_uni_st_unidade varchar2(8);
v_pro_st_descricao varchar2(70);
v_qtdmes01 number(15,3);
v_vlrmes01 number(20,2);
v_qtdmes02 number(15,3);
v_vlrmes02 number(20,2);
v_qtdmes03 number(15,3);
v_vlrmes03 number(20,2);
v_qtdmes04 number(15,3);
v_vlrmes04 number(20,2);
v_qtdmes05 number(15,3);
v_vlrmes05 number(20,2);
v_qtdmes06 number(15,3);
v_vlrmes06 number(20,2);
v_qtdtotal number(20,3);
v_vlrtotal number(20,2);
v_qtdmesnn number(15,3);
v_vlrmesnn number(20,2);
v_mescorr number(2,0);
v_mesidx number(2,0);
v_anocorr number(4,0);
v_anoidx number(4,0);
v_colqtd varchar2(10);
v_colvlr varchar2(10);begin
delete from mgcli.al_tb_rel_consmat d
where d.comp_st_nome = v_comp_st_nome
and d.usu_in_codigo = v_usu_in_codigo
and d.fil_in_codigo = v_fil_in_codigo;-- Raise_application_error(-20000, 'pdt_ini: ' || pdt_ini || ' pdt_fin: ' || pdt_fin || ' vdt_ini: ' || to_char(vdt_ini) || ' vdt_fin: ' || to_char(vdt_fin));
commit;
insert into mgcli.al_tb_rel_consmat m
(
m.comp_st_nome, m.usu_in_codigo, m.pro_tab_in_codigo, m.pro_pad_in_codigo, m.fil_in_codigo,
m.gru_ide_st_codigo, m.ide_st_nome, m.alm_in_codigo, m.alm_st_almoxar, m.loc_in_codigo,
m.loc_st_nome, m.ccf_in_reduzido, m.cus_st_descricao, m.gru_in_codigo, m.gru_st_nome,
m.pro_in_codigo, m.pro_st_descricao, m.esp_re_qtminimo, m.uni_st_unidade, m.qtdmes01,
m.vlrmes01, m.qtdmes02, m.vlrmes02, m.qtdmes03, m.vlrmes03,
m.qtdmes04, m.vlrmes04, m.qtdmes05, m.vlrmes05, m.qtdmes06,
m.vlrmes06, m.qtdtotal, m.vlrtotal
)
select distinct
v_comp_st_nome,
v_usu_in_codigo,
pro.pro_tab_in_codigo,
pro.pro_pad_in_codigo,
pes.fil_in_codigo,
pro.gru_ide_st_codigo,
gid.ide_st_nome,
--
mov.alm_in_codigo,
alm.alm_st_almoxar,
--
mov.loc_in_codigo,
aml.loc_st_nome,
--
ccf.ccf_in_reduzido,
cus.cus_st_descricao,
--
pro.gru_in_codigo,
gru.gru_st_nome,
--
pro.pro_in_codigo,
pro.pro_st_descricao,
--
case when pes.esp_re_qtminimo is null then 0 else pes.esp_re_qtminimo end as esp_re_qtminimo,
pro.uni_st_unidade,
--
0 as qtdmes01,
0 as vlrmes01,
0 as qtdmes02,
0 as vlrmes02,
0 as qtdmes03,
0 as vlrmes03,
0 as qtdmes04,
0 as vlrmes04,
0 as qtdmes05,
0 as vlrmes05,
0 as qtdmes06,
0 as vlrmes06,
0 as qtdtotal,
0 as vlrtotal
from
mgadm.est_produtos pro,
mgadm.est_proestat pes,
mgadm.est_movimento mov,
mgadm.est_tipomovto tpo,
mgadm.est_movimento_ccf ccf,
mgadm.est_almoxarifado alm,
mgadm.est_almoxlocal aml,
mgadm.est_grupos gru,
mgglo.glo_identificador gid,
mgcon.con_centro_custo cus
--
where pes.fil_in_codigo = pfil_in_codigo
--
and pes.pro_tab_in_codigo = pro.pro_tab_in_codigo
and pes.pro_pad_in_codigo = pro.pro_pad_in_codigo
and pes.pro_in_codigo = pro.pro_in_codigo
--
and mov.pro_tab_in_codigo = pro.pro_tab_in_codigo
and mov.pro_pad_in_codigo = pro.pro_pad_in_codigo
and mov.pro_in_codigo = pro.pro_in_codigo
and mov.alm_in_codigo is not null
--
and tpo.tpm_tab_in_codigo = mov.tpm_tab_in_codigo
and tpo.tpm_pad_in_codigo = mov.tpm_pad_in_codigo
and tpo.tpm_in_codigo = mov.tpm_in_codigo
--
and mov.org_tab_in_codigo = ccf.org_tab_in_codigo
and mov.org_pad_in_codigo = ccf.org_pad_in_codigo
and mov.org_in_codigo = ccf.org_in_codigo
and mov.org_tau_st_codigo = ccf.org_tau_st_codigo
and mov.ser_tab_in_codigo = ccf.ser_tab_in_codigo
and mov.ser_in_sequencia = ccf.ser_in_sequencia
and mov.mvt_in_lancam = ccf.mvt_in_lancam
--
and mov.alm_tab_in_codigo = alm.alm_tab_in_codigo
and mov.alm_pad_in_codigo = alm.alm_pad_in_codigo
and mov.alm_in_codigo = alm.alm_in_codigo
--
and mov.alm_tab_in_codigo = aml.alm_tab_in_codigo
and mov.alm_pad_in_codigo = aml.alm_pad_in_codigo
and mov.alm_in_codigo = aml.alm_in_codigo
and mov.loc_in_codigo = aml.loc_in_codigo
--
and pro.gru_tab_in_codigo = gru.gru_tab_in_codigo
and pro.gru_pad_in_codigo = gru.gru_pad_in_codigo
and pro.gru_ide_st_codigo = gru.gru_ide_st_codigo
and pro.gru_in_codigo = gru.gru_in_codigo
--
and gru.gru_tab_in_codigo = gid.tab_in_codigo
and gru.gru_pad_in_codigo = gid.pad_in_codigo
and gru.gru_ide_st_codigo = gid.ide_st_codigo
--
and cus.cus_tab_in_codigo = ccf.ccf_tab_in_codigo
and cus.cus_pad_in_codigo = ccf.ccf_pad_in_codigo
and cus.cus_ide_st_codigo = ccf.ccf_ide_st_codigo
and cus.cus_in_reduzido = ccf.ccf_in_reduzido
--
and pro.gru_ide_st_codigo = pgru_ide_st_codigo
and mov.alm_in_codigo >= palm_in_codigo_i
and mov.alm_in_codigo <= palm_in_codigo_f and mov.loc_in_codigo >= ploc_in_codigo_i
and mov.loc_in_codigo <= ploc_in_codigo_f and ccf.ccf_in_reduzido >= pccf_in_reduzido_i
and ccf.ccf_in_reduzido <= pccf_in_reduzido_f and pro.gru_in_codigo >= pgru_in_codigo_i
and pro.gru_in_codigo <= pgru_in_codigo_f and pro.pro_in_codigo >= ppro_in_codigo_i
and pro.pro_in_codigo <= ppro_in_codigo_f -- and pro.pro_st_cestoque = 'S' and tpo.tpm_bo_consumomedio = 'S' -- and to_char(mov.mvt_dt_movimento) >= vdt_ini
and to_char(mov.mvt_dt_movimento) <= vdt_fin order by pro.gru_ide_st_codigo, mov.alm_in_codigo, mov.loc_in_codigo, ccf.ccf_in_reduzido, pro.gru_in_codigo, pro.pro_in_codigo; commit; declare cursor cC1 is select distinct m.pro_tab_in_codigo, m.pro_pad_in_codigo, m.fil_in_codigo, m.gru_ide_st_codigo, m.alm_in_codigo, m.loc_in_codigo, m.ccf_in_reduzido, m.gru_in_codigo, m.pro_in_codigo from mgcli.al_tb_rel_consmat m where m.comp_st_nome = v_comp_st_nome and m.usu_in_codigo = v_usu_in_codigo and m.fil_in_codigo = v_fil_in_codigo; begin open cC1; loop fetch cC1 into v_pro_tab_in_codigo, v_pro_pad_in_codigo, v_fil_in_codigo, v_gru_ide_st_codigo, v_alm_in_codigo, v_loc_in_codigo, v_ccf_in_reduzido, v_gru_in_codigo, v_pro_in_codigo; exit when cC1%notfound; v_mescorr := extract(month from vdt_ini); v_anocorr := extract(year from vdt_ini); v_mesidx := 1; while v_mesidx <= 6 loop select case when sum(mov.mvt_re_quantidade) is null then 0 else sum(mov.mvt_re_quantidade) end as qtdmesnn, case when ( sum ( MGADM.F_CUSTO_PRODUTO(mov.fil_in_codigo,mov.pro_pad_in_codigo,mov.pro_in_codigo,1,1,mov.mvt_dt_movimento) ) * sum(mov.mvt_re_quantidade) ) is null then 0 else ( sum ( MGADM.F_CUSTO_PRODUTO(mov.fil_in_codigo,mov.pro_pad_in_codigo,mov.pro_in_codigo,1,1,mov.mvt_dt_movimento) ) * sum(mov.mvt_re_quantidade) ) end as vlrmesnn into v_qtdmesnn, v_vlrmesnn from mgadm.est_produtos pro, mgadm.est_proestat pes, mgadm.est_movimento mov, mgadm.est_tipomovto tpo, mgadm.est_movimento_ccf ccf, mgadm.est_almoxarifado alm, mgadm.est_almoxlocal aml, mgadm.est_grupos gru, mgglo.glo_identificador gid, mgcon.con_centro_custo cus -- where pes.fil_in_codigo = v_fil_in_codigo -- and pes.pro_tab_in_codigo = pro.pro_tab_in_codigo and pes.pro_pad_in_codigo = pro.pro_pad_in_codigo and pes.pro_in_codigo = pro.pro_in_codigo -- and mov.pro_tab_in_codigo = pro.pro_tab_in_codigo and mov.pro_pad_in_codigo = pro.pro_pad_in_codigo and mov.pro_in_codigo = pro.pro_in_codigo and mov.alm_in_codigo is not null -- and tpo.tpm_tab_in_codigo = mov.tpm_tab_in_codigo and tpo.tpm_pad_in_codigo = mov.tpm_pad_in_codigo and tpo.tpm_in_codigo = mov.tpm_in_codigo -- and mov.org_tab_in_codigo = ccf.org_tab_in_codigo and mov.org_pad_in_codigo = ccf.org_pad_in_codigo and mov.org_in_codigo = ccf.org_in_codigo and mov.org_tau_st_codigo = ccf.org_tau_st_codigo and mov.ser_tab_in_codigo = ccf.ser_tab_in_codigo and mov.ser_in_sequencia = ccf.ser_in_sequencia and mov.mvt_in_lancam = ccf.mvt_in_lancam -- and mov.alm_tab_in_codigo = alm.alm_tab_in_codigo and mov.alm_pad_in_codigo = alm.alm_pad_in_codigo and mov.alm_in_codigo = alm.alm_in_codigo -- and mov.alm_tab_in_codigo = aml.alm_tab_in_codigo and mov.alm_pad_in_codigo = aml.alm_pad_in_codigo and mov.alm_in_codigo = aml.alm_in_codigo and mov.loc_in_codigo = aml.loc_in_codigo -- and pro.gru_tab_in_codigo = gru.gru_tab_in_codigo and pro.gru_pad_in_codigo = gru.gru_pad_in_codigo and pro.gru_ide_st_codigo = gru.gru_ide_st_codigo and pro.gru_in_codigo = gru.gru_in_codigo -- and gru.gru_tab_in_codigo = gid.tab_in_codigo and gru.gru_pad_in_codigo = gid.pad_in_codigo and gru.gru_ide_st_codigo = gid.ide_st_codigo -- and cus.cus_tab_in_codigo = ccf.ccf_tab_in_codigo and cus.cus_pad_in_codigo = ccf.ccf_pad_in_codigo and cus.cus_ide_st_codigo = ccf.ccf_ide_st_codigo and cus.cus_in_reduzido = ccf.ccf_in_reduzido -- and pro.gru_ide_st_codigo = v_gru_ide_st_codigo and mov.alm_in_codigo = v_alm_in_codigo and mov.loc_in_codigo = v_loc_in_codigo and ccf.ccf_in_reduzido = v_ccf_in_reduzido and pro.gru_in_codigo = v_gru_in_codigo and pro.pro_in_codigo = v_pro_in_codigo -- and pro.pro_st_cestoque = 'S' and tpo.tpm_bo_consumomedio = 'S' -- and extract(month from mov.mvt_dt_movimento) = v_mescorr and extract(year from mov.mvt_dt_movimento) = v_anocorr; if v_mesidx = 1 then update mgcli.al_tb_rel_consmat u set u.qtdmes01 = v_qtdmesnn, u.vlrmes01 = v_vlrmesnn, u.qtdtotal = u.qtdtotal + v_qtdmesnn, u.vlrtotal = u.vlrtotal + v_vlrmesnn where u.comp_st_nome = v_comp_st_nome and u.usu_in_codigo = v_usu_in_codigo and u.fil_in_codigo = v_fil_in_codigo and u.pro_tab_in_codigo = v_pro_tab_in_codigo and u.pro_pad_in_codigo = v_pro_pad_in_codigo and u.gru_ide_st_codigo = v_gru_ide_st_codigo and u.alm_in_codigo = v_alm_in_codigo and u.loc_in_codigo = v_loc_in_codigo and u.ccf_in_reduzido = v_ccf_in_reduzido and u.gru_in_codigo = v_gru_in_codigo and u.pro_in_codigo = v_pro_in_codigo; end if; if v_mesidx = 2 then update mgcli.al_tb_rel_consmat u set u.qtdmes02 = v_qtdmesnn, u.vlrmes02 = v_vlrmesnn, u.qtdtotal = u.qtdtotal + v_qtdmesnn, u.vlrtotal = u.vlrtotal + v_vlrmesnn where u.comp_st_nome = v_comp_st_nome and u.usu_in_codigo = v_usu_in_codigo and u.fil_in_codigo = v_fil_in_codigo and u.pro_tab_in_codigo = v_pro_tab_in_codigo and u.pro_pad_in_codigo = v_pro_pad_in_codigo and u.gru_ide_st_codigo = v_gru_ide_st_codigo and u.alm_in_codigo = v_alm_in_codigo and u.loc_in_codigo = v_loc_in_codigo and u.ccf_in_reduzido = v_ccf_in_reduzido and u.gru_in_codigo = v_gru_in_codigo and u.pro_in_codigo = v_pro_in_codigo; end if; if v_mesidx = 3 then update mgcli.al_tb_rel_consmat u set u.qtdmes03 = v_qtdmesnn, u.vlrmes03 = v_vlrmesnn, u.qtdtotal = u.qtdtotal + v_qtdmesnn, u.vlrtotal = u.vlrtotal + v_vlrmesnn where u.comp_st_nome = v_comp_st_nome and u.usu_in_codigo = v_usu_in_codigo and u.fil_in_codigo = v_fil_in_codigo and u.pro_tab_in_codigo = v_pro_tab_in_codigo and u.pro_pad_in_codigo = v_pro_pad_in_codigo and u.gru_ide_st_codigo = v_gru_ide_st_codigo and u.alm_in_codigo = v_alm_in_codigo and u.loc_in_codigo = v_loc_in_codigo and u.ccf_in_reduzido = v_ccf_in_reduzido and u.gru_in_codigo = v_gru_in_codigo and u.pro_in_codigo = v_pro_in_codigo; end if; if v_mesidx = 4 then update mgcli.al_tb_rel_consmat u set u.qtdmes04 = v_qtdmesnn, u.vlrmes04 = v_vlrmesnn, u.qtdtotal = u.qtdtotal + v_qtdmesnn, u.vlrtotal = u.vlrtotal + v_vlrmesnn where u.comp_st_nome = v_comp_st_nome and u.usu_in_codigo = v_usu_in_codigo and u.fil_in_codigo = v_fil_in_codigo and u.pro_tab_in_codigo = v_pro_tab_in_codigo and u.pro_pad_in_codigo = v_pro_pad_in_codigo and u.gru_ide_st_codigo = v_gru_ide_st_codigo and u.alm_in_codigo = v_alm_in_codigo and u.loc_in_codigo = v_loc_in_codigo and u.ccf_in_reduzido = v_ccf_in_reduzido and u.gru_in_codigo = v_gru_in_codigo and u.pro_in_codigo = v_pro_in_codigo; end if; if v_mesidx = 5 then update mgcli.al_tb_rel_consmat u set u.qtdmes05 = v_qtdmesnn, u.vlrmes05 = v_vlrmesnn, u.qtdtotal = u.qtdtotal + v_qtdmesnn, u.vlrtotal = u.vlrtotal + v_vlrmesnn where u.comp_st_nome = v_comp_st_nome and u.usu_in_codigo = v_usu_in_codigo and u.fil_in_codigo = v_fil_in_codigo and u.pro_tab_in_codigo = v_pro_tab_in_codigo and u.pro_pad_in_codigo = v_pro_pad_in_codigo and u.gru_ide_st_codigo = v_gru_ide_st_codigo and u.alm_in_codigo = v_alm_in_codigo and u.loc_in_codigo = v_loc_in_codigo and u.ccf_in_reduzido = v_ccf_in_reduzido and u.gru_in_codigo = v_gru_in_codigo and u.pro_in_codigo = v_pro_in_codigo; end if; if v_mesidx = 6 then update mgcli.al_tb_rel_consmat u set u.qtdmes06 = v_qtdmesnn, u.vlrmes06 = v_vlrmesnn, u.qtdtotal = u.qtdtotal + v_qtdmesnn, u.vlrtotal = u.vlrtotal + v_vlrmesnn where u.comp_st_nome = v_comp_st_nome and u.usu_in_codigo = v_usu_in_codigo and u.fil_in_codigo = v_fil_in_codigo and u.pro_tab_in_codigo = v_pro_tab_in_codigo and u.pro_pad_in_codigo = v_pro_pad_in_codigo and u.gru_ide_st_codigo = v_gru_ide_st_codigo and u.alm_in_codigo = v_alm_in_codigo and u.loc_in_codigo = v_loc_in_codigo and u.ccf_in_reduzido = v_ccf_in_reduzido and u.gru_in_codigo = v_gru_in_codigo and u.pro_in_codigo = v_pro_in_codigo; end if; commit; v_mesidx := v_mesidx + 1; v_mescorr := v_mescorr + 1; if v_mescorr > 12 then
v_mescorr := 1;
v_anocorr := v_anocorr + 1;
end if;end loop;
end loop;
end;
end;
B)12 de setembro de 2014 às 9:39 pm #106962Sergio WilliansMestreBoa tarde Tadeu !
Trabalhar com ano em dois dígitos exige um certo cuidado. O pessoal geralmente cria uma confusão por causa da formatação utilizada. Imagine o seguinte caso:
SELECT TO_DATE(’01/01/01′,’DD/MM/YYYY’) FROM dual
R: 01/01/0001
O que deveria ser muitas vezes 01/01/2001, se torna 01/01/0001.
Vamos fazer de outra maneira:
SELECT TO_DATE(’01/01/01′,’DD/MM/RRRR’) FROM dual
R: 01/01/2001
A máscara ‘RRRR’ interpreta de 00 a 49 o século corrente. 50 a 99 o século anterior.
SELECT TO_DATE(’01/01/51′,’DD/MM/RRRR’) FROM dual
R: 01/01/1951
Verifique as máscaras do seu código. Como os parâmetros pdt_ini e pdt_fim são VARCHAR, provavelmente a formatação está errada.
Espero ter ajudado !
Abraço
12 de setembro de 2014 às 9:41 pm #106963rmanParticipante@Tadeu Rodrigues de Oliveira
Para dados do tipo data SEMPRE utilize DATE, TIMESTAMP OU TIMESTAMP WITH TIME ZONE.
Se a sua tabela de origem estiver como DATE, o trabalho será menor, basta alterar o tipo do parâmetro da procedure para DATE.
create or replace procedure mgcli.al_p_rel_consmat (
pdt_ini in date,
pdt_fin in date,
usu_in_codigo in number,
comp_st_nome in varchar2,
pfil_in_codigo in number,
pgru_ide_st_codigo in varchar2,
palm_in_codigo_i in number,
palm_in_codigo_f in number,
ploc_in_codigo_i in number,
ploc_in_codigo_f in number,
pccf_in_reduzido_i in number,
pccf_in_reduzido_f in number,
pgru_in_codigo_i in number,
pgru_in_codigo_f in number,
ppro_in_codigo_i in number,
ppro_in_codigo_f in number
)
-
AutorPosts
- Você deve fazer login para responder a este tópico.