Pular para o conteúdo
  • Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 9 anos, 2 meses atrás por Avatar de Marco BorgesMarco Borges.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #107763
    Avatar de Marco BorgesMarco Borges
    Participante

      Senhores.

      gostaria de saber como faço para chamar a execução de uma proc, após executar outra, dentro de uma pck que reuni a sequencia do trabalho.

      O que tenho é assim:

      –A chamada

      declare
      i integer;
      begin
      PCK_ALIMENTABASEDEVEDOR_teste.localiza_devedor (pNroTicket => 45);
      end;

      ————–

      A ideia é ele entrar na localiza_devedor , atualiza minha tabela temporaria com
      a coluna correta de cpf
      após isto formatar informacoes

      e so apos isto
      ele entrar na inclusão propiamente dita.

      So que o que nao sei fazer e fazer ele chamar nesta ordem.

      create or replace package body PCK_ALIMENTABASEDEVEDOR_teste is

      pNroTicket number (20);

      procedure localiza_devedor is

      vCPF varchar2(14);
      vCPF_DAC varchar2(14);
      vPRODUTO varchar2(5);
      vCOD_DEVEDOR number(19);
      VCONTRATO varchar2(30);

      CURSOR c1
      IS
      select cpf , PRODUTO, NROCONTRATO
      into VCPF ,vPRODUTO ,VCONTRATO
      from TEMP_INCLUSOES;
      CURSOR c2
      IS
      select dev_cpf,dev_cod
      into vCPF_DAC,vCOD_DEVEDOR
      from devedor,divida
      where dev_cod=div_dev_cod
      and dev_pro_cod = vPRODUTO
      or div_nrocontrato= VCONTRATO
      and dev_cpf like vCPF || ‘%’;

      begin
      open c1;
      for x in c2
      loop
      vCPF :=x.dev_cpf;

      update TEMP_INCLUSOES set cpf_ajustado=vCPF_DAC where cpf= substr (VCPF,1,12);

      end loop;

      commit;
      close c2;

      end localiza_devedor;

      Procedure formata_informacoes is
      v_produto varchar2(3);
      begin

      — Ajuste de contadores da tabela.
      update TEMP_INCLUSOES set id=seq_natan.nextval,PROCESSADO=0 ,INCLUIDO=0;

      — Procedimento para limpar espaços nos e-mails, caso haja
      UPDATE TEMP_INCLUSOES SET email1 = REGEXP_REPLACE(email1, ‘s*’, ”);
      UPDATE TEMP_INCLUSOES SET email2 = REGEXP_REPLACE(email2, ‘s*’, ”);
      UPDATE TEMP_INCLUSOES SET email3 = REGEXP_REPLACE(email3, ‘s*’, ”);
      UPDATE TEMP_INCLUSOES SET email4 = REGEXP_REPLACE(email4, ‘s*’, ”);
      UPDATE TEMP_INCLUSOES SET email5 = REGEXP_REPLACE(email5, ‘s*’, ”);

      — configuracao para cada credor em relação a localização do cliente.

      if v_produto =’IRD’ then
      update TEMP_INCLUSOES a set a.cpf = lpad(rtrim(cpf),12,0);
      end if;

      if v_produto =’ICG’ then
      update TEMP_INCLUSOES a set a.cpf = lpad(rtrim(cpf),12,0);
      end if;

      end formata_informacoes;

      procedure inclusao (pNroTicket in number) is

      vDev number(19);
      vID smallint;
      vCpf varchar2(14);
      vDdd number(2);
      vNum number(9);
      vUni varchar2(4);
      vUsu number(19);
      vTipo number(4);
      MsgErro varchar2(500);
      vCount number(4) := 0;
      vCountFones number(2);
      vcontrato varchar2(30);
      v_qua number(1);

      NAO_PROCESSADO constant number(1) := 0;
      ZERA_CONTADOR constant number(1) := 0;
      REG_PROCESSADO constant number(1) := 1;
      TELEFONE_INVALIDO constant number(2) := 75;
      USUARIO_POA constant number(5) := 14171;

      mDdd PCK_Types_Natan.tToken;
      mTel PCK_Types_Natan.tToken;

      cursor c1 is
      select *
      from TEMP_INCLUSOES
      where processado = NAO_PROCESSADO;

      function validaTelefone(pDdd number, pNum number) return boolean is
      sResult boolean;
      vQtTel number(2);
      begin
      vNum := funcAdaptarTelefoneAnatel(pDdd, pNum);

      select count(*)
      into vQtTel
      from telefone
      where tel_cpf = vCpf
      and tel_numero =vNum
      and tel_ddd = vDdd;

      if ((vQtTel = 0) and (vNum is not null)) then

      — Verifica se os numeros sao corretos
      if ((vQtTel = 0) and (length(nvl(vNum,0)) in (8,9)) and (vDdd is not null)) then
      — Telefone OK
      sResult := true;

      else
      — Telefone incorreto
      sResult := false;
      end if;

      else
      — Telefone nulo ou ja existe
      sResult := false;

      end if;

      return sResult;
      exception
      when others then
      MsgErro := sqlerrm;
      MsgErro := MsgErro || ‘
      Numero invalido! Numero [‘ || pDdd || ‘][‘ || pNum || ‘].’;
      insert
      into log_importacao_natan
      values (‘id ‘||to_char(vID),MsgErro,’TEMP_INCLUSOES’,3,sysdate);
      return false;
      end validaTelefone;

      begin

      for i in c1 loop
      begin

      vID := i.id;
      vcpf := i.cpf;

      — Busca devedor
      select max(dev_cod) into vDev
      from devedor
      where dev_pro_cod = ‘CCG’
      and dev_cpf like i.cpf || ‘%’;

      if (vDev is not null) then

      mDDD(1) := i.ddd_1;
      mTel(1) := i.tp_fone_1;

      vCountFones := ZERA_CONTADOR;

      for j in mTel.first .. mTel.last loop

      vDdd := mDdd(j);
      vNum := mTel(j);

      if validaTelefone(vDdd, vNum) then

      — Busca Unidade do devedor
      select max(div_uni_codacionamento) into vUni
      from divida
      where div_dev_cod = vDev;

      — Busca CPF para aparecer na inclusão do telefone.
      select max(dev_cpf) into vCPF
      from devedor
      where dev_cod = vDev;

      — Busca Usuario do Sistema da Filial
      begin
      select usu_cod into vUsu
      from usuario
      where usu_uni_cod = vUni
      and usu_valido = 1
      and upper(usu_nome) like ‘%SUPO%’ || vUni || ‘%’;
      exception
      when others then
      vUsu := USUARIO_POA;
      end;

      if isCelular(vNum, vDdd) then
      vTipo := PCK_CONSTANTES.TELEFONE_TIPO_CELULAR;
      else
      vTipo := PCK_CONSTANTES.TELEFONE_TIPO_OUTROS;
      end if;

      select dev_cpf into vcpf from devedor where dev_cod = vdev;

      insert
      into telefone (tel_cod
      ,tel_dev_cod
      ,tel_cpf
      ,tel_ddd
      ,tel_numero
      ,tel_tipo
      ,tel_turno
      ,tel_status
      ,tel_credor
      ,tel_uni_cod
      ,tel_datainclusao
      ,tel_usu_codinclusao
      ,tel_troca
      ,tel_qualificacaocredor)
      values (seq_tel.nextval
      ,vDev
      ,vCpf
      ,vDdd
      ,vNum
      ,vTipo–vtipo
      ,21
      ,PCK_CONSTANTES.TELEFONE_STATUS_NORMAL
      ,1
      ,vUni
      ,sysdate
      ,vUsu
      ,4 –rastreio
      ,v_qua );

      vCountFones := vCountFones + 1;

      end if;

      end loop;

      update TEMP_INCLUSOES
      set processado = REG_PROCESSADO
      ,incluido = vCountFones
      where id = vID;

      else
      — devedor nao encontrado
      update TEMP_INCLUSOES
      set processado = 2
      where id = vID;

      end if;

      vCount := vCount + 1;

      if (vCount = 500) then
      commit;
      vCount := 0;
      end if;

      exception
      when others then
      update TEMP_INCLUSOES
      set processado = 3
      where id = vID;
      MsgErro := sqlerrm;
      dbms_output.put_line(MsgErro);
      dbms_output.put_line(”);
      insert
      into log_importacao_natan
      values (‘id ‘||to_char(vID),MsgErro,’TEMP_INCLUSOES’,1,sysdate);
      commit;
      vCount := 0;
      end;
      end loop;
      commit;
      end inclusao;

      begin
      null;
      end PCK_ALIMENTABASEDEVEDOR_teste;

      #107766
      Avatar de rmanrman
      Participante

        @Marco Borges

        Não entendi qual é a dúvida de fato. Não seria fazer as 3 chamadas, uma após a outra?

        #107768
        Avatar de Marco BorgesMarco Borges
        Participante

          Seria.

          so que a chamada no test do pl quando eu coloco “.” não faz a chamada da proc localiza_devedor.

          Ele entra direto na inclusaão

          — Created on 29/09/2015 by MARCO.BORGES
          declare
          — Local variables here
          i integer;
          begin
          — Test statements here
          PCK_ALIMENTABASEDEVEDOR_teste.
          end;

          #107770
          Avatar de rmanrman
          Participante

            @Marco Borges

            Teste assim:


            begin
            PCK_ALIMENTABASEDEVEDOR_teste.localiza_devedor (pNroTicket => 45);
            PCK_ALIMENTABASEDEVEDOR_teste.formata_informacoes;
            PCK_ALIMENTABASEDEVEDOR_teste.inclusao (pNroTicket => 45);
            end;

            #107771
            Avatar de Marco BorgesMarco Borges
            Participante

              Meu caro.

              entre testes e com o que o amigo me falou
              fiz assim

              mudei na pck.
              create or replace package body PCK_ALIMENTABASEDEVEDOR_teste is

              pNroTicket integer;

              procedure localiza_devedor (pNroTicket int) is

              e fiz a chamada do teste assim:

              Veja.

              por nao conhecimento nao vi aonde tinha o erro, mas agora ele está fazendo certo a ordem de execute.

              — Created on 29/09/2015 by MARCO.BORGES
              declare
              — Local variables here
              i integer;
              begin
              — Test statements here
              begin
              PCK_ALIMENTABASEDEVEDOR_teste.localiza_devedor(pNroTicket => ’55’);

              end;

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