- 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.
-
AutorPosts
-
30 de outubro de 2012 às 10:23 pm #104720
Gustavo S Coelho
ParticipantePessoal,
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,30 de outubro de 2012 às 10:31 pm #104721rman
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. 😆
30 de outubro de 2012 às 10:49 pm #104722Gustavo S Coelho
ParticipanteOlá 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?
30 de outubro de 2012 às 10:51 pm #104723rman
Participante@gscoelho
Poderia postar o bloco PL/SQL em questão?
30 de outubro de 2012 às 11:04 pm #104724Gustavo 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;
30 de outubro de 2012 às 11:06 pm #104725Gustavo S Coelho
ParticipanteLembrando que o erro ocorre no INSERT da tabela FRETE.CONHECIMENTO.
31 de outubro de 2012 às 12:04 am #104726dcarvalho
ParticipanteOi 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/31 de outubro de 2012 às 2:19 pm #104727rman
Participante@gscoelho
É possível isolar o INSERT com BEGIN EXCEPTION END, desta forma:
DECLARECURSOR 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;
31 de outubro de 2012 às 5:36 pm #104728Gustavo 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.1 de novembro de 2012 às 4:12 pm #104737Gustavo S Coelho
ParticipantePessoal,
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 NOTAFISCAL25FROM 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;
-
AutorPosts
- Você deve fazer login para responder a este tópico.