Como importar um arquivo XML para o Oracle

Veja aqui a melhor forma de como importar um arquivo xml para o oracle, otimizando sua performance e garantindo bons resultados, sem ter que lê-lo linha a linha.

[ad#texto]

Como importar um arquivo XML para o Oracle? Tenho notado que esta pergunta tem afligido muitos desenvolvedores PL/SQL, até porque estamos falando de um arquivo físico, quer ele esteja em uma pasta local no servidor do banco de dados quer ele esteja disponível via uma URI e este fato pode comprometer a performance da aplicação principalmente com arquivos XML grandes.

Como importar um arquivo XML para o Oracle
Como importar um arquivo XML para o Oracle

Basicamente existem duas formas, uma irá ler o arquivo linha a linha e dependendo da estrutura e endentação do arquivo XML este processo será muito lento e a segunda iremos capturar o arquivo XML direto para um parse XML na memória do Oracle de forma direta e depois iremos transforma-lo em um documento DOM, esta forma é sem dúvidas a mais recomendada.

Agora vamos a parte prática e mostrar exemplos das duas formas de como importar um arquivo XML para o Oracle. O primeiro método é o da leitura linha a linha:

DECLARE
 clobXML   CLOB;
 domXML   dbms_xmldom.DOMDocument;
 arquivo   utl_file.file_type;
 eof      BOOLEAN := FALSE;
 linha     VARCHAR2(32767);

BEGIN
 --Inicializar o CLOB
 DBMS_LOB.createtemporary(clobXML , TRUE , DBMS_LOB.session);
 DBMS_LOB.open(clobXML, DBMS_LOB.LOB_ReadWrite);

 -- Abrir o arquivo para leitura
 arquivo := utl_file.fopen('/minha/pasta/', 'meuXML.xml', 'r');

 -- Loop de leitura linha a linha
 WHILE NOT(eof) LOOP
  BEGIN 
   utl_file.get_line(arquivo, linha);
   DBMS_LOB.writeAppend(vr_clobarq, LENGTH(linha), linha);
  EXCEPTION
   WHEN no_data_found THEN
    eof := TRUE;
  END;
 END LOOP;

 utl_file.fclose(arquivo);
END;

Os mais espertos irão notar que a gravação linha a linha em um CLOB é lenta e que o ideal é fazer um processo de buferização, porém como este não é o foco do post não vou incluir, caso alguém tenha interesse é só perguntar nos comentários que posso mostrar como fazer buferização na gravação do CLOB e com isso melhorar em até 80% o processo de gravação.

Bem simples, mas quando falamos em trabalhar com XML podemos dispensar o processo de leitura linha a linha e com isso facilitar o desenvolvimento e eliminar este processo já que o mesmo pode se tornar lento e depreciar bastante a performance da sua aplicação.

Agora vamos mostrar como adicionar diretamente o arquivo XML para um parse na memória do Oracle e com isso gerar um documento DOM diretamente.

DECLARE
 parse     xmlparser.Parser;
 pasta     varchar2(400) := '/minha/pasta/';
 arqXML   VARCHAR2(400) := 'meuXML.xml';
 arqErro   VARCHAR2(400) := 'arqErr.log';
 docDOM   dbms_xmldom.DOMDocument;

BEGIN
 -- Instanciar o novo parse
 parse := xmlparser.newParser;

 -- Definir as características do parse
 xmlparser.setValidationMode(p, FALSE);
 xmlparser.setErrorLog(parse, pasta || '/' || arqErro);
 xmlparser.setBaseDir(parse, pasta);

 -- Capturar o arquivo para o parse
 xmlparser.parse(parse, pasta || '/' || arqXML);

 -- get document
 docDOM := xmlparser.getDocument(parse);
END;

Bem mais simples e funcional.

Agora você já sabe como importar um arquivo xml para o Oracle.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.
ViamaisBLOG
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.