Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #106961
    Avatar de Tadeu Rodrigues de OliveiraTadeu Rodrigues de Oliveira
    Participante

      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
      ) is

      vdt_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)

      #106962
      Avatar de Sergio WilliansSergio Willians
      Mestre

        Boa 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

        #106963
        Avatar de rmanrman
        Participante

          @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
          )

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.
        plugins premium WordPress