Erro no Código

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal,

Não estou conseguindo identificar o porque do código não retornar os endereços. Podem me ajudar nesse sentido.


Code:

Selecionar tudo

     CURSOR cm_pes IS
        SELECT *
        FROM itg.cm_pessoa
        WHERE cm_pessoa.dt_processamento IS NULL;

     CURSOR cm_pes_vw(pi_cd_pessoa cm_pessoa_vw.cd_pessoa%type) IS
        SELECT *
        FROM itg.cm_pessoa_vw
        WHERE cm_pessoa_vw.CD_PESSOA = pi_cd_pessoa;
     --
     CURSOR cm_pes_end_vw(pi_cd_pessoa cm_pessoa_endereco_vw.cd_pessoa%type) IS
        SELECT *
        FROM itg.cm_pessoa_endereco_vw
        WHERE cm_pessoa_endereco_vw.CD_PESSOA = pi_cd_pessoa
        ;
     --
     CURSOR cm_pes_tel_vw(pi_cd_pessoa cm_pessoa_telefones_vw.cd_pessoa%type) IS
        SELECT *
        FROM itg.cm_pessoa_telefones_vw
        WHERE cm_pessoa_telefones_vw.CD_PESSOA = pi_cd_pessoa;

     r_cm_pes_end_vw cm_pes_end_vw%rowtype;
      
     
  BEGIN
     --
     For r_pes IN cm_pes loop
     
  
        For r_pes_vw IN cm_pes_vw(r_pes.id_pessoa) loop
    
        v_continua :=1;
          
        BEGIN
   
          
          if r_pes_vw.nome=r_pes_vw.nm_pessoa then
              -- este seria o padrão
             v_continua := 1;
          
          elsif r_pes_vw.nome<>r_pes_vw.nm_pessoa and r_pes_vw.nome not like '%POSTO%'   then
              -- fora do padrão
              -- pode ter sido cadastrado errado, nome não confere com a razao social oi
              -- pode ser um posto, caso seja posto, não queremos trabalhar o registro        
              v_continua:=1;
          else
              -- deve ser um posto
              v_continua:=0;
  
          end if;
          
 
           IF v_continua = 1 THEN
    
            OPEN cm_pes_end_vw (r_pes_vw.cd_pessoa);

                     FETCH cm_pes_end_vw
                        INTO r_cm_pes_end_vw;

                     IF cm_pes_end_vw%NOTFOUND  THEN                   
                                             
                           CLOSE cm_pes_end_vw;
                            v_continua:=0;                               
                           
                           RAISE e_sem_endereco;
                        
                     else
                         CLOSE cm_pes_end_vw; 
                     end if; 

              -- Carrega registros na corp_pessoas
              corp_pessoa.CD_PESSOA          := r_pes_vw.CD_PESSOA;
              corp_pessoa.NM_PESSOA          := r_pes_vw.NM_PESSOA;
              corp_pessoa.NR_CPF             := TRIM(r_pes_vw.NR_CPF);
              corp_pessoa.CD_PROFISSAO       := r_pes_vw.CD_PROFISSAO;
              corp_pessoa.DT_NASCIMENTO      := r_pes_vw.DT_NASCIMENTO;
              corp_pessoa.FG_SEXO            := TRIM(r_pes_vw.FG_SEXO);
              corp_pessoa.CD_ESTADO_CIVIL    := TO_NUMBER(TRIM(r_pes_vw.CD_ESTADO_CIVIL));
              corp_pessoa.CD_PAIS            := r_pes_vw.CD_PAIS;
              corp_pessoa.DT_INSERCAO        := r_pes_vw.DT_INSERCAO;
              corp_pessoa.NM_PESSOA_REDUZIDO := SUBSTR(r_pes_vw.NM_PESSOA_REDUZIDO,1,30);
              corp_pessoa.DS_ENDERECO        := SUBSTR(r_pes_vw.DS_ENDERECO,1,40);
              corp_pessoa.SG_ESTADO          := UPPER(SUBSTR(TRIM(r_pes_vw.SG_ESTADO),1,2));
              corp_pessoa.NR_MUNICIPIO_IBGE  := SUBSTR(r_pes_vw.NR_MUNICIPIO_IBGE,1,5);
              corp_pessoa.NM_MUNICIPIO_IBGE  := UPPER(TRIM(r_pes_vw.NM_MUNICIPIO_IBGE));
              corp_pessoa.NR_CEP             := r_pes_vw.NR_CEP;
              corp_pessoa.NR_DDI             := r_pes_vw.NR_DDI;
              corp_pessoa.NR_DDD             := SUBSTR(TRIM(r_pes_vw.NR_DDD),1,3);
              corp_pessoa.NR_TELEFONE        := SUBSTR(r_pes_vw.NR_TELEFONE,1,15);
              corp_pessoa.DE_EMAIL           := r_pes_vw.DE_EMAIL;
              corp_pessoa.DS_COMPLEMENTO     := TRIM(r_pes_vw.DS_COMPLEMENTO);
              corp_pessoa.NM_BAIRRO          := r_pes_vw.NM_BAIRRO;
              corp_pessoa.DE_ORIGEM          := 'CM.PESSOA';
              corp_pessoa.DS_NUMERO          := TRIM(r_pes_vw.DS_NUMERO);
              corp_pessoa.FL_TIPO_PESSOA     := r_pes_vw.FL_TIPO_PESSOA;
              corp_pessoa.DE_HOME_PAGE       := TRIM(r_pes_vw.DE_HOME_PAGE);
              corp_pessoa.NM_CONTATO         := TRIM(r_pes_vw.NM_CONTATO);
              --
          corp.corp_ireceive_pessoas_pakg.ireceive_pessoas(corp_pessoa);

          COMMIT;
          
          end if;
          
          ---- Tratamento de Erro ----
    
          EXCEPTION
          WHEN e_sem_endereco THEN
          UPDATE itg.cm_pessoa 
          SET de_observacao = 'ERRO AO PROCESSAR'
          WHERE dt_processamento is null;
        
          WHEN OTHERS THEN
                 ITG_GERA_LOG_PRC('ITG_CLIENTES',
                             'ITG_CM_PESSOA_PKG.PROCESSA_CLIENTE_PESSOA)',
                             'NÃO EXISTEM DADOS NA FUNÇÃO VERIFICA CLIENTE.' ||
                             TRIM(SYSDATE) || '-  PESSOA: ' || r_pes_vw.CD_PESSOA ||
                             '. STATUS - SQL Code: ' || TRIM(SQLCODE) ||
                             ' SQL ErrMsg: ' || TRIM(SQLERRM)); 
 
           END;
    
        End loop;
        
        COMMIT;
   
        if v_continua=1 then
    
        --Busca codigo da pessoa para a inclusao do endereco
        --Tabela cor.pessoa, busca pelo cpf e tipo de pessoa
        BEGIN
           SELECT cd_pessoa
             INTO v_cd_pessoa
           FROM corp.pessoas
           WHERE LPAD(TRIM(nr_cpf),14,'0')=LPAD(TRIM(corp_pessoa.nr_cpf),14,'0');
         --AND TRIM(fl_tipo_pessoa) = TRIM(corp_pessoa.fl_tipo_pessoa);
        exception
          when others then
           v_cd_pessoa := 0;
         end;


        --FAZ A INCLUSÃO DO ENDERECO APENAS QUANDO POSSUIR CÓDIGO DA PESSOA
        IF (NVL(v_cd_pessoa, 0) > 0) THEN

          --Loop nos endereços da view cm_pessoa_endereco_vw
          --cor.cor_ireceive_pessoas_endereco_pakg.ireceive_pessoas(cor_pessoa_endereco);
          
          For r_pes_end_vw IN cm_pes_end_vw(r_pes.id_pessoa) loop
  
          BEGIN
           
           ---- Tratamento de Erro ---- 
            if v_municipio is not null then
            RAISE e_sem_municipio;         
            end if;
            
         
            if v_estado is not null then          
            RAISE e_sem_estado; 
            end if;
         
                                 
            if v_cep is not null then           
            RAISE e_sem_cep;          
            end if;
          
         
            if v_logradouro is not null then
            RAISE e_sem_logradouro;        
            end if;
senger
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Sex, 16 Abr 2010 5:19 pm
Localização: SC

Use alguma tecnica de debug
==
Se você tem o TAD por ai ele faz o debug pra você (na versão free não tem este recurso)
==
Ou você pode usar outros expedientes pra fazer isto..
dbms_output.put_line('Sua mensagem'); ou raise_application_error(-20000,'sua mensagem);
CarlosStetner
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Sex, 14 Mai 2010 8:06 pm
Localização: São José dos Campos - SP
O Primeiro passo não vale nada se você não chegar ao final.

Realmente é dificil te ajudar, pois não temos acesso aos dados, nem a estrutura da tabelas.

Se o código esta funcionando com certeza é algum problema com a logica ou os dados.

Como nosso amigo já disse, a melhor maneira é você mesmo debuggar.

Coloca os dbms_output pra ir mostrando os valores das variaveis em cada etapada do seu codigo.

e não esqueça de setar serveroutput on antes de usar o dbms_output
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante