› Fóruns › Banco de dados Oracle › 01722. 00000 – “invalid number” › 01722. 00000 – “invalid number”
É 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;