Gostaria de saber como faço para criar uma precedure para importar as informações
das notas fiscais eletronicas em xml no Banco Oracle. Agradeço quem disponibilizar.
como ler e gravar dados de um xml de nota fiscal no Oracle
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Qua, 26 Set 2018 4:50 pm
Criei essa procedure para salvar em XML os dados de um Pedido de Compra e disponibilizá-lo para ser consumido por um WebService. Nesse caso é um Pedido de Compra mas pode-se aplicar também para uma Nota Fiscal. Atente-se às colunas envolvidas na sua Nota Fiscal e como montar o XML usando essa proc.
A procedure envolve também a criação de três cursores para controlar a montagem do cabeçalho, dos detalhes das linhas do pedido e o número desse pedido. E depois salva esse XML em uma coluna de uma tabela criada com essa intenção.
Espero poder ajudar em algo.
A procedure envolve também a criação de três cursores para controlar a montagem do cabeçalho, dos detalhes das linhas do pedido e o número desse pedido. E depois salva esse XML em uma coluna de uma tabela criada com essa intenção.
Espero poder ajudar em algo.
CREATE OR REPLACE PROCEDURE imp_prc_ws_xml_po_edi_renner ( pn_po_id NUMBER
, pn_retorno IN OUT NUMBER
) IS
CURSOR cur_po_header IS
SELECT XMLConcat( XMLForest( header.po_numero AS "PO_NUMERO"
, header.status AS "STATUS"
, ent.codigo AS "FORNECEC_CODIGO"
, ent.nome AS "FORNEC_NOME"
, header.atributo3 AS "GRUPO")
)
FROM imp_po_dge_erp header
, imp_entidades ent
WHERE header.po_id = pn_po_id
AND header.fornec_codigo = ent.codigo(+)
AND header.release_num = ( SELECT Max(x.release_num)
FROM imp_po_dge_erp x
WHERE x.po_id = header.po_id);
CURSOR cur_po_linhas(pc_po_numero VARCHAR2) IS
SELECT XMLAgg( XMLElement( "IMP_PEDIDO_LINHA"
, XMLConcat( XMLForest( linha.item_codigo AS "ITEM_CODIGO"
, linha.qtde AS "QTDE"
, linha.class_fiscal_codigo AS "CLASS_FISCAL"
, To_Char(entr.dt_prometida, 'DD/MM/RRRR') AS "DT_PROMETIDA")
)))
FROM imp_po_lin_erp linha
, imp_po_lin_entr_erp entr
WHERE linha.po_numero = pc_po_numero
AND linha.po_numero = entr.po_numero(+)
AND linha.linha_num = entr.po_linha_numero
AND linha.release_num = ( SELECT Max(x.release_num)
FROM imp_po_lin_erp x
WHERE x.po_numero = linha.po_numero
AND x.linha_num = linha.linha_num)
ORDER BY linha.linha_num;
CURSOR cur_po_numero IS
SELECT header.po_numero
FROM imp_po_dge_erp header
WHERE header.po_id = pn_po_id;
vx_header xmltype;
vx_line xmltype;
vx_concat xmltype;
você_po_numero imp_po_dge_erp.po_numero%TYPE;
você_step VARCHAR2(150);
BEGIN
você_step := 'OPEN cursor [cur_po_header]';
OPEN cur_po_header;
FETCH cur_po_header INTO vx_header;
CLOSE cur_po_header;
você_step := 'OPEN cursor [cur_po_numero]';
OPEN cur_po_numero;
FETCH cur_po_numero INTO você_po_numero;
CLOSE cur_po_numero;
você_step := 'OPEN cursor [cur_po_linhas]';
OPEN cur_po_linhas(você_po_numero);
FETCH cur_po_linhas INTO vx_line;
CLOSE cur_po_linhas;
você_step := 'Montando XML pedidos';
SELECT XMLElement( "IMP_PEDIDOS"
, XMLConcat(
vx_header
, vx_line
)
)
INTO vx_concat
FROM dual;
você_step := 'Inserindo registro [cmx_ws_edi]';
INSERT INTO cmx_ws_edi
( edi_id
, message_type
, xml
, chave
, cnpj_agente
, status
, creation_date
)
VALUES
( cmx_ws_edi_sq1.NEXTVAL
, 'IMP_PO'
, vx_concat
, você_po_numero
, NULL
, 0
, SYSDATE
);
EXCEPTION
WHEN OTHERS THEN
pn_retorno := 2;
raise_application_error (-20000, 'Step [' || você_step || '] erro: ' || SQLERRM);
END;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante