Pular para o conteúdo
  • Este tópico contém 9 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 4 meses atrás por Gustavo S Coelho.
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #104720
    Gustavo S Coelho
    Participante

      Pessoal,

      Estou implementando uma rotina de carga de dados a partir de uma consulta em uma tabela. O dados são guardados em um cursor e durante um FOR para estes 5.000 registros retornados na consulta preciso inserir os dados em outra tabela.
      A tabela contém 49 colunas e o script ao ser executado lança a seguinte mensagem de erro:

      Relatório de erro:
      ORA-01722: invalid number
      ORA-06512: at line 158
      01722. 00000 – “invalid number”

      A linha referida é o início da cláusula insert não especificando em qual coluna está ocorrendo o erro.
      Realizei a impressão dos dados a serem inseridos com a utilização do DBMS_OUTPUT.PUT_LINE(”,), mas é limitada a exibição dos dados na saída dbms para verificar em qual registro parou a execução.

      Acredito que alguns registros estão passando sem problemas porém em um montante de cinco mil registros fica complicado mapear os valores inconsistêntes.

      Existe alguma forma de identificar qual coluna ocorreu o erro na medida que o processamento é realizado dentro de um FOR em PL/SQL?

      Pesquisei a respeito da geração de uma tabela para guardar o log de erros seguindo o exemplo em: https://forums.oracle.com/forums/thread … ID=1081017

      Mas ainda não consegui extrair a informação que me leve a identificar qual coluna está com erro durante o insert.

      Qualquer orientação seria importante.
      Obrigado pela colaboração,

      #104721
      rman
      Participante

        @gscoelho

        Tente da seguinte forma:


        BEGIN
        // FOR AQUI
        EXCEPTION
        WHEN OTHERS THEN
        // DBMS_OUTPUT.PUT_LINE AQUI
        END

        Apenas quando ocorrer a exceção você imprime dos dados do registro. 😆

        #104722
        Gustavo S Coelho
        Participante

          Olá rman,

          O problema é que os dados a serem inseridos estão em um cursor declarado antes do BEGIN este cursor não é visível no bloco do EXCEPTION.

          Alguma outra sugestão?

          #104723
          rman
          Participante

            @gscoelho

            Poderia postar o bloco PL/SQL em questão?

            #104724
            Gustavo S Coelho
            Participante

              É um pouco extenso mas vamos lá…

              DECLARE

              CURSOR C_CARGA_CONHECIMENTO IS
              SELECT *
              FROM CONFRETE.CONHECIMENTO CON
              where CON.NUMEROCONHECIMENTO IS NOT NULL;

              CURSOR C_DADOS_VEICULO(P_PLACA VARCHAR2) IS
              SELECT VEIC.ID AS VEIC_ID,
              DECODE(veic.flg_emite_conhecimento, 'S', 112, TRAN.ID) AS TRAN_ID
              FROM TRANSP.VEICULOS VEIC INNER JOIN TRANSP.TRANSPORTADORAS TRAN
              ON VEIC.TRAN_ID = TRAN.ID
              WHERE PLACA = P_PLACA;

              CURSOR C_NOTAS IS
              SELECT NOTAS
              FROM FRETE.TMP_SPLIT_NOTAS
              WHERE NOTAS IS NOT NULL;

              CURSOR C_KM_IND(P_CIDADE_DESTINATARIO VARCHAR2) IS
              SELECT
              CODIGO CIDA_CODIGO_DESTINO
              FROM
              PEDI.CIDADES
              WHERE
              UPPER(NOME) = UPPER(P_CIDADE_DESTINATARIO);

              W_TABLE_SPLIT split_tbl;

              W_COD_SOLICITACAO FRETE.CONHECIMENTOS_SOLICITACOES.ID%TYPE;
              W_VEICULO_ID TRANSP.VEICULOS.ID%TYPE;
              W_TRANSPORTADORA_ID TRANSP.TRANSPORTADORAS.ID%TYPE;
              W_CIDA_CODIGO_ORIGEM FRETE.CONHECIMENTO.CIDA_CODIGO_ORIGEM%TYPE;
              W_CIDA_CODIGO_DESTINO FRETE.CONHECIMENTO.CIDA_CODIGO_DESTINO%TYPE;

              W_NUM_CONHECIMENTO FRETE.CONHECIMENTO.NUM_CONHECIMENTO%TYPE;
              W_SERIE_NOTA VARCHAR2(3);
              W_NUMERO_NOTA VARCHAR2(8);

              W_NFFS VARCHAR2(11);
              W_COUNT NUMBER;
              W_NUM_PROGRAM_AUX NUMBER;
              P_DATA_LOG DATE;

              NFFS VARCHAR2(32767);

              BEGIN

              W_CIDA_CODIGO_ORIGEM := 7102;
              P_DATA_LOG := SYSDATE;

              FOR R_CARGA_CONHECIMENTO IN C_CARGA_CONHECIMENTO LOOP

              OPEN C_DADOS_VEICULO(R_CARGA_CONHECIMENTO.PLACAVEICULO);
              FETCH C_DADOS_VEICULO INTO W_VEICULO_ID, W_TRANSPORTADORA_ID;
              
                IF C_DADOS_VEICULO%NOTFOUND THEN
                  -- GRAVAR EM UMA TABELA DE LOG
              

              -- RAISE_APPLICATION_ERROR(-20002, 'VEICULO DE PLACA '|| R_CARGA_CONHECIMENTO.PLACAVEICULO||' NÃO ENCONTRADO'||' ERRO: '||SQLERRM);
              W_VEICULO_ID := NULL;
              W_TRANSPORTADORA_ID := NULL;

                END IF;
              
              CLOSE C_DADOS_VEICULO;     
              
              IF R_CARGA_CONHECIMENTO.TRANSPORTADORA IS NOT NULL THEN
              
                OPEN C_KM_IND(R_CARGA_CONHECIMENTO.CIDTRANSPORTADORA);
                FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
              
                IF C_KM_IND%NOTFOUND THEN
                -- GRAVAR LOG NA NOVA TABELA DE LOG
                  INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
                  VALUES(P_DATA_LOG, 'ATENÇÃO !!...TRANSPORTADORA NÃO INFORMADA ! '||CHR(10)||CHR(13)||
                                     'CADASTRE O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.CIDTRANSPORTADORA || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                                     'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO'); 
                END IF;
              
                CLOSE C_KM_IND;  
              
              ELSE
              
                OPEN C_KM_IND(R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO);
                FETCH C_KM_IND INTO W_CIDA_CODIGO_ORIGEM;
                FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
              
                IF C_KM_IND%NOTFOUND THEN
                 -- GRAVAR LOG NA NOVA TABELA DE LOG
                  INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
                  VALUES(P_DATA_LOG, 'ATENÇÃO !!...DESTINO NÃO INFORMADO ! '||CHR(10)||CHR(13)||
                                         'CADASTRE  O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                                         'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO');
                END IF;
              
                CLOSE C_KM_IND;   
              
              END IF;
              
              INSERT 
              INTO FRETE.CONHECIMENTO 
                (   
                  NUM_CONHECIMENTO,
                  NUM_PROGRAMACAO,
                  VAL_MERCADORIAS,    
                  NATUREZA,
                  QTD_VOLUME,
                  ESPECIE,
                  PESO_KG,
                  PESO_CUBADO,
                  STATUS,
                  COSO_ID,
                  VAL_FRETE_LOJA, 
                  VAL_FRETE, 
                  FILIAL_VENDA_ID,
                  COCR_ID,
                  FLG_AVULSO,
                  VEICULO_ID,
                  TRANSPORTADORA_ID,
                  LOFR_ID,
                  ALIQUOTA,             
                  VAL_ICMS, 
                  VAL_BASE_CALCULO,
                  VAL_TOTAL_FRETE,                      
                  COD_CONTABIL,
                  LOCAL_EMISSAO,
                  LOCAL_ENTREGA,
                  LOCAL_CALCULO_FRETE,                
                  MENSAGEM,        
                  MENSAGEM2,
                  CIF_FOB,
                  FLG_IMPRIMIR,
                  CIDA_CODIGO_ORIGEM, 
                  CIDA_CODIGO_DESTINO
                )
                VALUES
                 (   
                  R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                  R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO,
                  R_CARGA_CONHECIMENTO.VALORMERCADORIAS,    
                  R_CARGA_CONHECIMENTO.NATUREZA,
                  R_CARGA_CONHECIMENTO.QTD_VOLUME,
                  R_CARGA_CONHECIMENTO.ESPECIE,
                  R_CARGA_CONHECIMENTO.PESO_KG,
                  R_CARGA_CONHECIMENTO.PESO_CUBADO,
                  R_CARGA_CONHECIMENTO.STATUS,
                  R_CARGA_CONHECIMENTO.COSO_ID,
                  R_CARGA_CONHECIMENTO.FRETEVALOR,
                  NVL(R_CARGA_CONHECIMENTO.FRETEVALOR,0),
                  R_CARGA_CONHECIMENTO.FILIALVENDA,
                  R_CARGA_CONHECIMENTO.COCR_ID,
                  'N',
                  NVL(W_VEICULO_ID,0),
                  W_TRANSPORTADORA_ID,
                  1,        
                  R_CARGA_CONHECIMENTO.ALIQUOTA,             
                  R_CARGA_CONHECIMENTO.ICMSFRETE, 
                  R_CARGA_CONHECIMENTO.BASECALCULOFRETE,
                  R_CARGA_CONHECIMENTO.TOTALFRETE,                      
                  R_CARGA_CONHECIMENTO.CODIGOCONTABIL,
                  R_CARGA_CONHECIMENTO.LOCALEMISSAO,
                  R_CARGA_CONHECIMENTO.LOCALENTREGA,
                  R_CARGA_CONHECIMENTO.BASECALCULOFRETE,               
                  R_CARGA_CONHECIMENTO.MENSAGEM,        
                  R_CARGA_CONHECIMENTO.MENSAGEM2,
                  R_CARGA_CONHECIMENTO.CIFFOB,
                  R_CARGA_CONHECIMENTO.FLG_IMPRIMIR,
                  W_CIDA_CODIGO_ORIGEM, 
                  W_CIDA_CODIGO_DESTINO  
                 ); 
              SELECT NVL(NUM_ATUAL,0) INTO W_NUM_CONHECIMENTO
              FROM FRETE.ULTIMO_NUM_CONHECIMENTO;
              

              NFFS := R_CARGA_CONHECIMENTO.NOTAFISCAL1 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL2 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL3 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL4 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL5 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL6 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL7 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL8 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL9 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL10 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL11 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL12 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL13 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL14 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL15 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL16 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL17 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL18 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL19 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL20 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL21 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL22 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL23 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL24 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL25;

              FRETE.PROC_SPLIT_NOTAS(NFFS); -- PROCEDURE PARA POPULAR A TABELA TEMPORARIA DE NOTAS

              OPEN C_NOTAS;
              FETCH C_NOTAS BULK COLLECT INTO W_TABLE_SPLIT;
              CLOSE C_NOTAS;

              W_COUNT := 0;
              -- VERIFICA A EXISTENCIA DE REGISTRO, CASO CONTRARIO LEVANTA EXCEÇÃO -----------------------------------------------
              FOR I IN W_TABLE_SPLIT.FIRST..W_TABLE_SPLIT.LAST LOOP
              IF W_TABLE_SPLIT(I) IS NOT NULL THEN
              W_COUNT := W_COUNT + 1;
              EXIT;
              END IF;
              END LOOP;

              IF W_COUNT = 0 THEN
              RAISE_APPLICATION_ERROR(-20003, 'NÃO FOI ENCONTRADA NOTA PARA A PROGRAMAÇÃO '|| R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO ||' ERRO: '||SQLERRM);
              END IF;


              FOR I IN 1 .. W_TABLE_SPLIT.LAST LOOP

              W_NFFS := W_TABLE_SPLIT(I);
              
              W_SERIE_NOTA:=  SUBSTR(W_NFFS, 0, 3);
              W_NUMERO_NOTA:= SUBSTR(W_NFFS, 4, 8);
              
              IF W_TABLE_SPLIT(I) IS NOT NULL THEN
               IF W_NUMERO_NOTA IS NOT NULL THEN
              
                      INSERT
                      INTO FRETE.NOTAS_FISCAIS_CONHECIMENTOS 
                        (      
                              CON_NUMERO,
                              NFFS_NUMERO,
                              NFFS_SERIE
                        )
                        VALUES
                        (      
                              R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                              W_NUMERO_NOTA,
                              W_SERIE_NOTA
                      );
                      END IF;
                END IF;
              

              END LOOP;
              W_TABLE_SPLIT := NULL;
              DELETE FROM FRETE.TMP_SPLIT_NOTAS;
              W_NUM_PROGRAM_AUX := R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO;

              END LOOP;

              COMMIT;

              END;

              #104725
              Gustavo S Coelho
              Participante

                Lembrando que o erro ocorre no INSERT da tabela FRETE.CONHECIMENTO.

                #104726
                dcarvalho
                Participante

                  Oi gscoelho,

                  Verifique pelo describe das duas tabelas, as “mesmas” colunas onde na FRETE.CONHECIMENTO esteja como number e na CONFRETE.CONHECIMENTO varchar2. Exemplo:

                  [i]desc FRETE.CONHECIMENTO
                  desc CONFRETE.CONHECIMENTO
                  [/i]
                  Identificada a coluna suspeita, você pode encontrar o registro causador do erro utilizando o translate assim como utilizei abaixo:

                  [i]SELECT sql_id, trim(translate(sql_id, ‘1234567890’, ‘ ‘)) sem_nro
                  , dbid, trim(translate(dbid, ‘1234567890’, ‘ ‘)) sem_nro2
                  FROM dba_hist_sqltext
                  WHERE trim(translate(sql_id, ‘1234567890’, ‘ ‘)) IS NOT NULL
                  [/i]

                  Abraço,
                  Danilo Carvalho
                  profissionaloracle.com.br/blogs/dcarvalho/

                  #104727
                  rman
                  Participante

                    @gscoelho

                    É possível isolar o INSERT com BEGIN EXCEPTION END, desta forma:


                    DECLARE

                    CURSOR C_CARGA_CONHECIMENTO IS
                    SELECT *
                    FROM CONFRETE.CONHECIMENTO CON
                    where CON.NUMEROCONHECIMENTO IS NOT NULL;

                    CURSOR C_DADOS_VEICULO(P_PLACA VARCHAR2) IS
                    SELECT VEIC.ID AS VEIC_ID,
                    DECODE(veic.flg_emite_conhecimento, 'S', 112, TRAN.ID) AS TRAN_ID
                    FROM TRANSP.VEICULOS VEIC INNER JOIN TRANSP.TRANSPORTADORAS TRAN
                    ON VEIC.TRAN_ID = TRAN.ID
                    WHERE PLACA = P_PLACA;

                    CURSOR C_NOTAS IS
                    SELECT NOTAS
                    FROM FRETE.TMP_SPLIT_NOTAS
                    WHERE NOTAS IS NOT NULL;

                    CURSOR C_KM_IND(P_CIDADE_DESTINATARIO VARCHAR2) IS
                    SELECT
                    CODIGO CIDA_CODIGO_DESTINO
                    FROM
                    PEDI.CIDADES
                    WHERE
                    UPPER(NOME) = UPPER(P_CIDADE_DESTINATARIO);

                    W_TABLE_SPLIT split_tbl;

                    W_COD_SOLICITACAO FRETE.CONHECIMENTOS_SOLICITACOES.ID%TYPE;
                    W_VEICULO_ID TRANSP.VEICULOS.ID%TYPE;
                    W_TRANSPORTADORA_ID TRANSP.TRANSPORTADORAS.ID%TYPE;
                    W_CIDA_CODIGO_ORIGEM FRETE.CONHECIMENTO.CIDA_CODIGO_ORIGEM%TYPE;
                    W_CIDA_CODIGO_DESTINO FRETE.CONHECIMENTO.CIDA_CODIGO_DESTINO%TYPE;

                    W_NUM_CONHECIMENTO FRETE.CONHECIMENTO.NUM_CONHECIMENTO%TYPE;
                    W_SERIE_NOTA VARCHAR2(3);
                    W_NUMERO_NOTA VARCHAR2(8);

                    W_NFFS VARCHAR2(11);
                    W_COUNT NUMBER;
                    W_NUM_PROGRAM_AUX NUMBER;
                    P_DATA_LOG DATE;

                    NFFS VARCHAR2(32767);

                    BEGIN

                    W_CIDA_CODIGO_ORIGEM := 7102;
                    P_DATA_LOG := SYSDATE;

                    FOR R_CARGA_CONHECIMENTO IN C_CARGA_CONHECIMENTO LOOP

                    OPEN C_DADOS_VEICULO(R_CARGA_CONHECIMENTO.PLACAVEICULO);
                    FETCH C_DADOS_VEICULO INTO W_VEICULO_ID, W_TRANSPORTADORA_ID;
                    
                      IF C_DADOS_VEICULO%NOTFOUND THEN
                        -- GRAVAR EM UMA TABELA DE LOG
                    

                    -- RAISE_APPLICATION_ERROR(-20002, 'VEICULO DE PLACA '|| R_CARGA_CONHECIMENTO.PLACAVEICULO||' NÃO ENCONTRADO'||' ERRO: '||SQLERRM);
                    W_VEICULO_ID := NULL;
                    W_TRANSPORTADORA_ID := NULL;

                      END IF;
                    
                    CLOSE C_DADOS_VEICULO;     
                    
                    IF R_CARGA_CONHECIMENTO.TRANSPORTADORA IS NOT NULL THEN
                    
                      OPEN C_KM_IND(R_CARGA_CONHECIMENTO.CIDTRANSPORTADORA);
                      FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
                    
                      IF C_KM_IND%NOTFOUND THEN
                      -- GRAVAR LOG NA NOVA TABELA DE LOG
                        INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
                        VALUES(P_DATA_LOG, 'ATENÇÃO !!...TRANSPORTADORA NÃO INFORMADA ! '||CHR(10)||CHR(13)||
                                           'CADASTRE O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.CIDTRANSPORTADORA || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                                           'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO'); 
                      END IF;
                    
                      CLOSE C_KM_IND;  
                    
                    ELSE
                    
                      OPEN C_KM_IND(R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO);
                      FETCH C_KM_IND INTO W_CIDA_CODIGO_ORIGEM;
                      FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
                    
                      IF C_KM_IND%NOTFOUND THEN
                       -- GRAVAR LOG NA NOVA TABELA DE LOG
                        INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
                        VALUES(P_DATA_LOG, 'ATENÇÃO !!...DESTINO NÃO INFORMADO ! '||CHR(10)||CHR(13)||
                                               'CADASTRE  O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                                               'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO');
                      END IF;
                    
                      CLOSE C_KM_IND;   
                    
                    END IF;
                    
                    BEGIN    
                      INSERT 
                      INTO FRETE.CONHECIMENTO 
                        (   
                          NUM_CONHECIMENTO,
                          NUM_PROGRAMACAO,
                          VAL_MERCADORIAS,    
                          NATUREZA,
                          QTD_VOLUME,
                          ESPECIE,
                          PESO_KG,
                          PESO_CUBADO,
                          STATUS,
                          COSO_ID,
                          VAL_FRETE_LOJA, 
                          VAL_FRETE, 
                          FILIAL_VENDA_ID,
                          COCR_ID,
                          FLG_AVULSO,
                          VEICULO_ID,
                          TRANSPORTADORA_ID,
                          LOFR_ID,
                          ALIQUOTA,             
                          VAL_ICMS, 
                          VAL_BASE_CALCULO,
                          VAL_TOTAL_FRETE,                      
                          COD_CONTABIL,
                          LOCAL_EMISSAO,
                          LOCAL_ENTREGA,
                          LOCAL_CALCULO_FRETE,                
                          MENSAGEM,        
                          MENSAGEM2,
                          CIF_FOB,
                          FLG_IMPRIMIR,
                          CIDA_CODIGO_ORIGEM, 
                          CIDA_CODIGO_DESTINO
                        )
                        VALUES
                         (   
                          R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                          R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO,
                          R_CARGA_CONHECIMENTO.VALORMERCADORIAS,    
                          R_CARGA_CONHECIMENTO.NATUREZA,
                          R_CARGA_CONHECIMENTO.QTD_VOLUME,
                          R_CARGA_CONHECIMENTO.ESPECIE,
                          R_CARGA_CONHECIMENTO.PESO_KG,
                          R_CARGA_CONHECIMENTO.PESO_CUBADO,
                          R_CARGA_CONHECIMENTO.STATUS,
                          R_CARGA_CONHECIMENTO.COSO_ID,
                          R_CARGA_CONHECIMENTO.FRETEVALOR,
                          NVL(R_CARGA_CONHECIMENTO.FRETEVALOR,0),
                          R_CARGA_CONHECIMENTO.FILIALVENDA,
                          R_CARGA_CONHECIMENTO.COCR_ID,
                          'N',
                          NVL(W_VEICULO_ID,0),
                          W_TRANSPORTADORA_ID,
                          1,        
                          R_CARGA_CONHECIMENTO.ALIQUOTA,             
                          R_CARGA_CONHECIMENTO.ICMSFRETE, 
                          R_CARGA_CONHECIMENTO.BASECALCULOFRETE,
                          R_CARGA_CONHECIMENTO.TOTALFRETE,                      
                          R_CARGA_CONHECIMENTO.CODIGOCONTABIL,
                          R_CARGA_CONHECIMENTO.LOCALEMISSAO,
                          R_CARGA_CONHECIMENTO.LOCALENTREGA,
                          R_CARGA_CONHECIMENTO.BASECALCULOFRETE,               
                          R_CARGA_CONHECIMENTO.MENSAGEM,        
                          R_CARGA_CONHECIMENTO.MENSAGEM2,
                          R_CARGA_CONHECIMENTO.CIFFOB,
                          R_CARGA_CONHECIMENTO.FLG_IMPRIMIR,
                          W_CIDA_CODIGO_ORIGEM, 
                          W_CIDA_CODIGO_DESTINO  
                         ); 
                    EXCEPTION
                         WHEN OTHERS THEN
                              DBMS_OUTPUT.PUT_LINE(R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO);     
                    END;
                    
                    SELECT NVL(NUM_ATUAL,0) INTO W_NUM_CONHECIMENTO
                    FROM FRETE.ULTIMO_NUM_CONHECIMENTO;
                    

                    NFFS := R_CARGA_CONHECIMENTO.NOTAFISCAL1 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL2 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL3 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL4 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL5 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL6 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL7 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL8 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL9 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL10 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL11 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL12 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL13 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL14 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL15 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL16 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL17 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL18 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL19 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL20 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL21 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL22 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL23 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL24 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL25;

                    FRETE.PROC_SPLIT_NOTAS(NFFS); -- PROCEDURE PARA POPULAR A TABELA TEMPORARIA DE NOTAS

                    OPEN C_NOTAS;
                    FETCH C_NOTAS BULK COLLECT INTO W_TABLE_SPLIT;
                    CLOSE C_NOTAS;

                    W_COUNT := 0;
                    -- VERIFICA A EXISTENCIA DE REGISTRO, CASO CONTRARIO LEVANTA EXCEÇÃO -----------------------------------------------
                    FOR I IN W_TABLE_SPLIT.FIRST..W_TABLE_SPLIT.LAST LOOP
                    IF W_TABLE_SPLIT(I) IS NOT NULL THEN
                    W_COUNT := W_COUNT + 1;
                    EXIT;
                    END IF;
                    END LOOP;

                    IF W_COUNT = 0 THEN
                    RAISE_APPLICATION_ERROR(-20003, 'NÃO FOI ENCONTRADA NOTA PARA A PROGRAMAÇÃO '|| R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO ||' ERRO: '||SQLERRM);
                    END IF;


                    FOR I IN 1 .. W_TABLE_SPLIT.LAST LOOP

                    W_NFFS := W_TABLE_SPLIT(I);
                    
                    W_SERIE_NOTA:=  SUBSTR(W_NFFS, 0, 3);
                    W_NUMERO_NOTA:= SUBSTR(W_NFFS, 4, 8);
                    
                    IF W_TABLE_SPLIT(I) IS NOT NULL THEN
                     IF W_NUMERO_NOTA IS NOT NULL THEN
                    
                            INSERT
                            INTO FRETE.NOTAS_FISCAIS_CONHECIMENTOS 
                              (      
                                    CON_NUMERO,
                                    NFFS_NUMERO,
                                    NFFS_SERIE
                              )
                              VALUES
                              (      
                                    R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                                    W_NUMERO_NOTA,
                                    W_SERIE_NOTA
                            );
                            END IF;
                      END IF;
                    

                    END LOOP;
                    W_TABLE_SPLIT := NULL;
                    DELETE FROM FRETE.TMP_SPLIT_NOTAS;
                    W_NUM_PROGRAM_AUX := R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO;

                    END LOOP;

                    COMMIT;

                    END;

                    #104728
                    Gustavo S Coelho
                    Participante

                      @rman,

                      Executei da maneira que vc sugeriu isolando o insert no begin e capturando as excessões, aparentemente o script executou apenas para os registros que não houve problemas embora não tenha exibido os registros com erro pois ultrapassou o limite de exibição do DBMS_OUTPUT.

                      Apaguei os dados da tabela e estou executanto novamente para ter certeza disso, a questão é que a tabela CONFRETE.CONHECIMENTO tem campos com tipos de dados diferentes da tabela FRETE.CONHECIMENTO estive pesquisando a respeito e descobri que seria possível setar no cursor forçando a conversão dos dados usando o TO_NUMBER para garantir que o cursor já terá os tipos de dados de acordo com o cabeçalho do insert. Estou alterando isso enquanto o script executa.
                      Na verdade é um montante de 104.169 mil registros eu estava me baseando pela quantidade de linhas que o SQLDeveloper conseguiu processar ao invés de fazer um count(*).

                      Vou aguardar o processamento da carga e analisar melhor o resultado, qualquer coisa volto a pedir um auxilio.
                      Muito obrigado pela atenção de vcs todos.

                      #104737
                      Gustavo S Coelho
                      Participante

                        Pessoal,

                        Fiz a alteração do script forçando a conversão dos dados ao setar no cursor e deixei a rotina executando ontem ao final do dia, ao chegar hoje de manhã o script foi interrompido com o seguinte erro:

                        Exceção de E/S: Software caused connection abort: recv failed

                        É possível que alguém tenha interrompido o processo ou ultrapassou alguma configuração no Oralce quanto a limite de execução transação após um período em execução?

                        Estou executando o script no Oracle SQL Developer.

                        Segue o script alterado:

                        DECLARE

                        CURSOR C_CARGA_CONHECIMENTO IS
                        SELECT
                        TO_NUMBER(NUMEROCONHECIMENTO) AS NUMEROCONHECIMENTO,
                        TO_NUMBER(NUMEROPROGRAMACAO) AS NUMEROPROGRAMACAO,
                        TO_NUMBER(VALORMERCADORIAS) AS VALORMERCADORIAS,
                        TO_CHAR(NATUREZA) AS NATUREZA,
                        TO_NUMBER(QTD_VOLUME) AS QTD_VOLUME,
                        TO_CHAR(ESPECIE) AS ESPECIE,
                        TO_NUMBER(PESO_KG) AS PESO_KG, -- É VARCHAR2 EM CONFRETE
                        TO_NUMBER(PESO_CUBADO) AS PESO_CUBADO, -- É VARCHAR2 EM CONFRETE
                        TO_NUMBER(STATUS) AS STATUS, -- É VARCHAR2 EM CONFRETE
                        TO_NUMBER(COSO_ID) AS COSO_ID,
                        TO_NUMBER(NVL(FRETEVALOR, 0)) AS FRETEVALOR,
                        TO_NUMBER(FILIALVENDA) AS FILIALVENDA,
                        TO_NUMBER(COCR_ID) AS COCR_ID,
                        -- 'N', --FLG_AVULSO SETADO DE FORMA FIXA
                        --TO_NUMBER(NVL(W_VEICULO_ID,0)), --NÃO PRECISA POIS É --NVLW_VEICULO_ID,0, --NÃO PRECISA POIS É CAPTURADO POSTERIORMENTE
                        TO_NUMBER(TRANSP.ID) IDTRANSPORTADORA, --ADICIONADO O JOIN COM TRNSP
                        -- 1, SETADO DE FORMA FIXA
                        TO_NUMBER(ALIQUOTA) AS ALIQUOTA,
                        TO_NUMBER(ICMSFRETE) AS ICMSFRETE,
                        TO_NUMBER(BASECALCULOFRETE) AS BASECALCULOFRETE,
                        TO_CHAR(CODIGOCONTABIL) AS CODIGOCONTABIL,
                        TO_CHAR(LOCALEMISSAO) AS LOCALEMISSAO,
                        TO_CHAR(LOCALENTREGA) AS LOCALENTREGA,
                        TO_CHAR(MENSAGEM) AS MENSAGEM,
                        TO_CHAR(MENSAGEM2) AS MENSAGEM2,
                        TO_CHAR(CIFFOB) AS CIFFOB,
                        TO_CHAR(FLG_IMPRIMIR) AS FLG_IMPRIMIR,
                        --CIDA_CODIGO_ORIGEM, NÃO PRECISA POIS É CAPTURADO POSTERIORMENTE
                        --CIDA_CODIGO_DESTINO NÃO PRECISA POIS É CAPTURADO POSTERIORMENTE
                        TO_CHAR(PLACAVEICULO) AS PLACAVEICULO, -- É NECESSÁRIO PARA MONTAR O CURSOR C_DADOS_VEICULO
                        TO_CHAR(MUNICIPIODESTINATARIO) AS MUNICIPIODESTINATARIO, -- -- É NECESSÁRIO PARA MONTAR O CURSOR C_KM_IND
                        TO_CHAR(NOTAFISCAL1) AS NOTAFISCAL1,
                        TO_CHAR(NOTAFISCAL2) AS NOTAFISCAL2,
                        TO_CHAR(NOTAFISCAL3) AS NOTAFISCAL3,
                        TO_CHAR(NOTAFISCAL4) AS NOTAFISCAL4,
                        TO_CHAR(NOTAFISCAL5) AS NOTAFISCAL5,
                        TO_CHAR(NOTAFISCAL6) AS NOTAFISCAL6,
                        TO_CHAR(NOTAFISCAL7) AS NOTAFISCAL7,
                        TO_CHAR(NOTAFISCAL8) AS NOTAFISCAL8,
                        TO_CHAR(NOTAFISCAL9) AS NOTAFISCAL9,
                        TO_CHAR(NOTAFISCAL10) AS NOTAFISCAL10,
                        TO_CHAR(NOTAFISCAL11) AS NOTAFISCAL11,
                        TO_CHAR(NOTAFISCAL12) AS NOTAFISCAL12,
                        TO_CHAR(NOTAFISCAL13) AS NOTAFISCAL13,
                        TO_CHAR(NOTAFISCAL14) AS NOTAFISCAL14,
                        TO_CHAR(NOTAFISCAL15) AS NOTAFISCAL15,
                        TO_CHAR(NOTAFISCAL16) AS NOTAFISCAL16,
                        TO_CHAR(NOTAFISCAL17) AS NOTAFISCAL17,
                        TO_CHAR(NOTAFISCAL18) AS NOTAFISCAL18,
                        TO_CHAR(NOTAFISCAL19) AS NOTAFISCAL19,
                        TO_CHAR(NOTAFISCAL20) AS NOTAFISCAL20,
                        TO_CHAR(NOTAFISCAL21) AS NOTAFISCAL21,
                        TO_CHAR(NOTAFISCAL22) AS NOTAFISCAL22,
                        TO_CHAR(NOTAFISCAL23) AS NOTAFISCAL23,
                        TO_CHAR(NOTAFISCAL24) AS NOTAFISCAL24,
                        TO_CHAR(NOTAFISCAL25) AS NOTAFISCAL25

                        FROM CONFRETE.CONHECIMENTO CON, TRANSP.TRANSPORTADORAS TRANSP
                        WHERE CON.NUMEROCONHECIMENTO IS NOT NULL;
                        -- A partir de uma faixa: and CON.NUMEROCONHECIMENTO >= 501077 and CON.NUMEROCONHECIMENTO <= 501079;

                        CURSOR C_DADOS_VEICULO(P_PLACA VARCHAR2) IS
                        SELECT VEIC.ID AS VEIC_ID,
                        DECODE(veic.flg_emite_conhecimento, 'S', 112, TRAN.ID) AS TRAN_ID
                        FROM TRANSP.VEICULOS VEIC INNER JOIN TRANSP.TRANSPORTADORAS TRAN
                        ON VEIC.TRAN_ID = TRAN.ID
                        WHERE PLACA = P_PLACA;

                        CURSOR C_NOTAS IS
                        SELECT NOTAS
                        FROM FRETE.TMP_SPLIT_NOTAS
                        WHERE NOTAS IS NOT NULL;

                        CURSOR C_KM_IND(P_CIDADE_DESTINATARIO VARCHAR2) IS
                        SELECT
                        CODIGO CIDA_CODIGO_DESTINO
                        FROM
                        PEDI.CIDADES
                        WHERE
                        UPPER(NOME) = UPPER(P_CIDADE_DESTINATARIO);

                        --select * FROM table(FC_SPLIT_NOTAS('a,b,c')) NFFS

                        W_TABLE_SPLIT split_tbl;

                        W_VEICULO_ID TRANSP.VEICULOS.ID%TYPE;
                        W_TRANSPORTADORA_ID TRANSP.TRANSPORTADORAS.ID%TYPE;
                        W_COD_SOLICITACAO FRETE.CONHECIMENTOS_SOLICITACOES.ID%TYPE;
                        W_CIDA_CODIGO_ORIGEM FRETE.CONHECIMENTO.CIDA_CODIGO_ORIGEM%TYPE;
                        W_CIDA_CODIGO_DESTINO FRETE.CONHECIMENTO.CIDA_CODIGO_DESTINO%TYPE;

                        W_NUM_CONHECIMENTO FRETE.CONHECIMENTO.NUM_CONHECIMENTO%TYPE;
                        W_SERIE_NOTA VARCHAR2(3);
                        W_NUMERO_NOTA VARCHAR2(8);

                        W_NFFS VARCHAR2(11);
                        W_COUNT NUMBER;
                        W_NUM_PROGRAM_AUX NUMBER;
                        P_DATA_LOG DATE;

                        NFFS VARCHAR2(32767);

                        BEGIN

                        DELETE FROM FRETE.conhecimentos_solicitacoes;

                        INSERT INTO FRETE.conhecimentos_solicitacoes
                        SELECT * FROM CONFRETE.conhecimentos_solicitacoes;

                        DELETE FROM FRETE.conhecimentos_notas;

                        INSERT INTO FRETE.conhecimentos_notas
                        SELECT * FROM CONFRETE.conhecimentos_notas;

                        DELETE FROM FRETE.NOTAS_FISCAIS_CONHECIMENTOS;

                        DELETE FROM FRETE.conhecimento;

                        DELETE FROM FRETE.conhecimentos_capas_respostas;

                        INSERT INTO FRETE.conhecimentos_capas_respostas
                        SELECT * FROM CONFRETE.conhecimentos_capas_respostas;

                        -- LAURO DE FREITAS
                        W_CIDA_CODIGO_ORIGEM := 7102;
                        P_DATA_LOG := SYSDATE;

                        FOR R_CARGA_CONHECIMENTO IN C_CARGA_CONHECIMENTO LOOP

                        OPEN C_DADOS_VEICULO(R_CARGA_CONHECIMENTO.PLACAVEICULO);
                        FETCH C_DADOS_VEICULO INTO W_VEICULO_ID, W_TRANSPORTADORA_ID;
                        
                          IF C_DADOS_VEICULO%NOTFOUND THEN
                            -- GRAVAR EM UMA TABELA DE LOG
                        

                        -- RAISE_APPLICATION_ERROR(-20002, 'VEICULO DE PLACA '|| R_CARGA_CONHECIMENTO.PLACAVEICULO||' NÃO ENCONTRADO'||' ERRO: '||SQLERRM);
                        W_VEICULO_ID := NULL;
                        W_TRANSPORTADORA_ID := NULL;

                          END IF;
                        
                        CLOSE C_DADOS_VEICULO;     
                        
                        IF R_CARGA_CONHECIMENTO.IDTRANSPORTADORA IS NOT NULL THEN
                        
                          OPEN C_KM_IND(R_CARGA_CONHECIMENTO.IDTRANSPORTADORA);
                          FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
                        
                          IF C_KM_IND%NOTFOUND THEN
                          -- GRAVAR LOG NA NOVA TABELA DE LOG
                            INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
                            VALUES(P_DATA_LOG, 'ATENÇÃO !!...TRANSPORTADORA NÃO INFORMADA ! '||CHR(10)||CHR(13)||
                                               'CADASTRE O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.IDTRANSPORTADORA || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                                               'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO'); 
                          END IF;
                        
                          CLOSE C_KM_IND;  
                        
                        ELSE
                        
                          OPEN C_KM_IND(R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO);
                          -- ORIGINAL: FETCH C_KM_IND INTO W_KILOMETRAGEM, W_INDICECALCULO, W_FATORDECALCULO, W_CIDA_CODIGO_ORIGEM, W_CIDA_CODIGO_DESTINO;
                          FETCH C_KM_IND INTO W_CIDA_CODIGO_ORIGEM;
                          FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
                        
                          IF C_KM_IND%NOTFOUND THEN
                           -- GRAVAR LOG NA NOVA TABELA DE LOG
                            INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
                            VALUES(P_DATA_LOG, 'ATENÇÃO !!...DESTINO NÃO INFORMADO ! '||CHR(10)||CHR(13)||
                                                   'CADASTRE  O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                                                   'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO');
                          END IF;
                        
                          CLOSE C_KM_IND;   
                        
                        END IF;
                        
                        BEGIN  
                            INSERT 
                            INTO FRETE.CONHECIMENTO 
                              (   
                                NUM_CONHECIMENTO,
                                NUM_PROGRAMACAO,
                                VAL_MERCADORIAS,    
                                NATUREZA,
                                QTD_VOLUME,
                                ESPECIE,
                                PESO_KG,
                                PESO_CUBADO,
                                STATUS,
                                COSO_ID,
                                VAL_FRETE_LOJA, 
                                VAL_FRETE, 
                                FILIAL_VENDA_ID,
                                COCR_ID,
                                FLG_AVULSO,
                                VEICULO_ID,
                                TRANSPORTADORA_ID,
                                LOFR_ID,
                                ALIQUOTA,             
                                VAL_ICMS, 
                                VAL_BASE_CALCULO,
                                VAL_TOTAL_FRETE,                      
                                COD_CONTABIL,
                                LOCAL_EMISSAO,
                                LOCAL_ENTREGA,
                                MENSAGEM,        
                                MENSAGEM2,
                                CIF_FOB,
                                FLG_IMPRIMIR,
                                CIDA_CODIGO_ORIGEM, 
                                CIDA_CODIGO_DESTINO
                              )
                              VALUES
                               (   
                               -- REVISAR A NOMENCLATURA
                                R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                                R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO,
                                R_CARGA_CONHECIMENTO.VALORMERCADORIAS,    
                                R_CARGA_CONHECIMENTO.NATUREZA,
                                R_CARGA_CONHECIMENTO.QTD_VOLUME,
                                R_CARGA_CONHECIMENTO.ESPECIE,
                                R_CARGA_CONHECIMENTO.PESO_KG,
                                R_CARGA_CONHECIMENTO.PESO_CUBADO,        
                                R_CARGA_CONHECIMENTO.STATUS,
                                R_CARGA_CONHECIMENTO.COSO_ID,
                                R_CARGA_CONHECIMENTO.FRETEVALOR,
                                NVL(R_CARGA_CONHECIMENTO.FRETEVALOR,0),
                                R_CARGA_CONHECIMENTO.FILIALVENDA,
                                R_CARGA_CONHECIMENTO.COCR_ID,
                                'N',
                                NVL(W_VEICULO_ID,0),
                                W_TRANSPORTADORA_ID,
                                1,        
                                R_CARGA_CONHECIMENTO.ALIQUOTA,             
                                R_CARGA_CONHECIMENTO.ICMSFRETE, 
                                R_CARGA_CONHECIMENTO.BASECALCULOFRETE,
                                R_CARGA_CONHECIMENTO.FRETEVALOR,                      
                                R_CARGA_CONHECIMENTO.CODIGOCONTABIL,
                                R_CARGA_CONHECIMENTO.LOCALEMISSAO,
                                R_CARGA_CONHECIMENTO.LOCALENTREGA,
                                R_CARGA_CONHECIMENTO.MENSAGEM,        
                                R_CARGA_CONHECIMENTO.MENSAGEM2,
                                R_CARGA_CONHECIMENTO.CIFFOB,
                                R_CARGA_CONHECIMENTO.FLG_IMPRIMIR,
                                W_CIDA_CODIGO_ORIGEM, 
                                W_CIDA_CODIGO_DESTINO  
                               );
                        EXCEPTION
                             WHEN OTHERS THEN
                        
                                DBMS_OUTPUT.PUT_LINE('01 - R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO: '|| R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO);
                                DBMS_OUTPUT.PUT_LINE('02 - R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO: '|| R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO);
                                DBMS_OUTPUT.PUT_LINE('03 - R_CARGA_CONHECIMENTO.VALORMERCADORIAS: '|| R_CARGA_CONHECIMENTO.VALORMERCADORIAS);    
                                DBMS_OUTPUT.PUT_LINE('04 - R_CARGA_CONHECIMENTO.NATUREZA: '||R_CARGA_CONHECIMENTO.NATUREZA);
                                DBMS_OUTPUT.PUT_LINE('05 - R_CARGA_CONHECIMENTO.QTD_VOLUME: '||R_CARGA_CONHECIMENTO.QTD_VOLUME);
                                DBMS_OUTPUT.PUT_LINE('06 - R_CARGA_CONHECIMENTO.ESPECIE: '||R_CARGA_CONHECIMENTO.ESPECIE);
                                DBMS_OUTPUT.PUT_LINE('07 - R_CARGA_CONHECIMENTO.PESO_KG: '||R_CARGA_CONHECIMENTO.PESO_KG);
                                DBMS_OUTPUT.PUT_LINE('08 - R_CARGA_CONHECIMENTO.PESO_CUBADO: '||R_CARGA_CONHECIMENTO.PESO_CUBADO);
                                DBMS_OUTPUT.PUT_LINE('09 - R_CARGA_CONHECIMENTO.STATUS: '||R_CARGA_CONHECIMENTO.STATUS);
                                DBMS_OUTPUT.PUT_LINE('10 - R_CARGA_CONHECIMENTO.COSO_ID: '||R_CARGA_CONHECIMENTO.COSO_ID);
                                DBMS_OUTPUT.PUT_LINE('11 - R_CARGA_CONHECIMENTO.FRETEVALOR: '||R_CARGA_CONHECIMENTO.FRETEVALOR);
                                DBMS_OUTPUT.PUT_LINE('12 - NVL(R_CARGA_CONHECIMENTO.FRETEVALOR,0): '||NVL(R_CARGA_CONHECIMENTO.FRETEVALOR,0));
                                DBMS_OUTPUT.PUT_LINE('13 - R_CARGA_CONHECIMENTO.FILIALVENDA: '||R_CARGA_CONHECIMENTO.FILIALVENDA);
                                DBMS_OUTPUT.PUT_LINE('14 - R_CARGA_CONHECIMENTO.COCR_ID: '||R_CARGA_CONHECIMENTO.COCR_ID);
                                DBMS_OUTPUT.PUT_LINE('15 - N:' || 'N');
                                DBMS_OUTPUT.PUT_LINE('16 - NVL(W_VEICULO_ID,0): '||NVL(W_VEICULO_ID,0));
                                DBMS_OUTPUT.PUT_LINE('17 - W_TRANSPORTADORA_ID: '||W_TRANSPORTADORA_ID);
                                DBMS_OUTPUT.PUT_LINE('18 - 1: '||1);
                                DBMS_OUTPUT.PUT_LINE('19 - R_CARGA_CONHECIMENTO.ALIQUOTA: '||R_CARGA_CONHECIMENTO.ALIQUOTA);
                                DBMS_OUTPUT.PUT_LINE('20 - R_CARGA_CONHECIMENTO.ICMSFRETE: '||R_CARGA_CONHECIMENTO.ICMSFRETE);
                                DBMS_OUTPUT.PUT_LINE('21 - R_CARGA_CONHECIMENTO.BASECALCULOFRETE: '||R_CARGA_CONHECIMENTO.BASECALCULOFRETE);
                                DBMS_OUTPUT.PUT_LINE('22 - R_CARGA_CONHECIMENTO.TOTALFRETE: '||R_CARGA_CONHECIMENTO.FRETEVALOR);
                                DBMS_OUTPUT.PUT_LINE('23 - R_CARGA_CONHECIMENTO.CODIGOCONTABIL: '||R_CARGA_CONHECIMENTO.CODIGOCONTABIL);
                                DBMS_OUTPUT.PUT_LINE('24 - R_CARGA_CONHECIMENTO.LOCALEMISSAO: '||R_CARGA_CONHECIMENTO.LOCALEMISSAO);
                                DBMS_OUTPUT.PUT_LINE('25 - R_CARGA_CONHECIMENTO.LOCALENTREGA: '||R_CARGA_CONHECIMENTO.LOCALENTREGA);   
                                DBMS_OUTPUT.PUT_LINE('26 - R_CARGA_CONHECIMENTO.BASECALCULOFRETE: '||R_CARGA_CONHECIMENTO.BASECALCULOFRETE);
                                DBMS_OUTPUT.PUT_LINE('27 - R_CARGA_CONHECIMENTO.MENSAGEM: '||R_CARGA_CONHECIMENTO.MENSAGEM);
                                DBMS_OUTPUT.PUT_LINE('28 - R_CARGA_CONHECIMENTO.MENSAGEM2: '||R_CARGA_CONHECIMENTO.MENSAGEM2);
                                DBMS_OUTPUT.PUT_LINE('29 -  R_CARGA_CONHECIMENTO.CIFFOB: '||R_CARGA_CONHECIMENTO.CIFFOB);
                                DBMS_OUTPUT.PUT_LINE('30 - R_CARGA_CONHECIMENTO.FLG_IMPRIMIR: '||R_CARGA_CONHECIMENTO.FLG_IMPRIMIR);
                                DBMS_OUTPUT.PUT_LINE('31 - W_CIDA_CODIGO_ORIGEM: '||W_CIDA_CODIGO_ORIGEM);
                                DBMS_OUTPUT.PUT_LINE('32 - W_CIDA_CODIGO_DESTINO: '||W_CIDA_CODIGO_DESTINO);        
                        
                        END;
                        
                        SELECT NVL(NUM_ATUAL,0) INTO W_NUM_CONHECIMENTO
                        FROM FRETE.ULTIMO_NUM_CONHECIMENTO;
                        

                        NFFS := R_CARGA_CONHECIMENTO.NOTAFISCAL1 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL2 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL3 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL4 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL5 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL6 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL7 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL8 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL9 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL10 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL11 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL12 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL13 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL14 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL15 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL16 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL17 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL18 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL19 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL20 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL21 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL22 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL23 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL24 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL25;

                        FRETE.PROC_SPLIT_NOTAS(NFFS); -- PROCEDURE PARA POPULAR A TABELA TEMPORARIA DE NOTAS

                        OPEN C_NOTAS;
                        FETCH C_NOTAS BULK COLLECT INTO W_TABLE_SPLIT;
                        /IF C_NOTAS%NOTFOUND THEN
                        RAISE_APPLICATION_ERROR(-20003, 'NÃO FOI ENCONTRADA NOTA PARA A PROGRAMAÇÃO '||P_PROGRAMACAO||' ERRO: '||SQLERRM);
                        END IF;
                        /
                        CLOSE C_NOTAS;

                        W_COUNT := 0;
                        -- VERIFICA A EXISTENCIA DE REGISTRO, CASO CONTRARIO LEVANTA EXCEÇÃO -----------------------------------------------
                        FOR I IN W_TABLE_SPLIT.FIRST..W_TABLE_SPLIT.LAST LOOP
                        IF W_TABLE_SPLIT(I) IS NOT NULL THEN
                        W_COUNT := W_COUNT + 1;
                        EXIT;
                        END IF;
                        END LOOP;

                        --DBMS_OUTPUT.PUT_LINE('W_COUNT '||W_COUNT);

                        IF W_COUNT = 0 THEN
                        RAISE_APPLICATION_ERROR(-20003, 'NÃO FOI ENCONTRADA NOTA PARA A PROGRAMAÇÃO '|| R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO ||' ERRO: '||SQLERRM);
                        END IF;


                        FOR I IN 1 .. W_TABLE_SPLIT.LAST LOOP

                        W_NFFS := W_TABLE_SPLIT(I);
                        
                        W_SERIE_NOTA:=  SUBSTR(W_NFFS, 0, 3);
                        W_NUMERO_NOTA:= SUBSTR(W_NFFS, 4, 8);
                        
                        IF W_TABLE_SPLIT(I) IS NOT NULL THEN
                         IF W_NUMERO_NOTA IS NOT NULL THEN
                        
                                INSERT
                                INTO FRETE.NOTAS_FISCAIS_CONHECIMENTOS 
                                  (      
                                        CON_NUMERO,
                                        NFFS_NUMERO,
                                        NFFS_SERIE
                                  )
                                  VALUES
                                  (      
                                        R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                                        W_NUMERO_NOTA,
                                        W_SERIE_NOTA
                                );
                                END IF;
                          END IF;
                        

                        END LOOP;
                        W_TABLE_SPLIT := NULL;
                        DELETE FROM FRETE.TMP_SPLIT_NOTAS;
                        W_NUM_PROGRAM_AUX := R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO;

                        END LOOP;

                        COMMIT;

                        /*OPEN C_NOTAS('00100108863,00100108864,00100108865');
                        FETCH C_NOTAS BULK COLLECT INTO W_TABLE_SPLIT;
                        CLOSE C_NOTAS;

                        FOR I IN 1 .. W_TABLE_SPLIT.LAST LOOP
                        DBMS_OUTPUT.PUT_LINE(W_TABLE_SPLIT(I)|| 'X');
                        END LOOP;*/

                        END;

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