Arquivo XML por query SQL no Banco de Dados ORACLE

A geração de Arquivo XML por query SQL no Banco de Dados ORACLE, vem dentro de uma tendência que muitos profissionais já se depararam com situações de transição de dados entre sistemas, ou definindo melhor o Intercâmbio Eletrônico de Dados, do inglês Electronic Data Interchange (EDI), principalmente em processos de migração entre sistemas.

O EDI é operacionalizado pela troca estruturada de dados, uma das formas mais tradicionais encontradas para realizar esse processo é através dos arquivos textos (TXTs) padronizados.

Um exemplo desse processo, são as trocas de dados realizadas com as instituições bancárias através dos arquivos de remessas e retornos. Outro bom exemplo, estão relacionadas as implantações e migrações dos sistemas Sistema de Gestão Empresarial, ou Enterprise Resource Planning (ERPs), onde há a necessidade da troca de dados estruturada com os sistemas legados, de dados de clientes, produtos, vendas, entre outros. Neste caso a geração de Arquivo XML por query SQL no Banco de Dados ORACLE pode auxiliar em muito nesse processo.

Como a filosofia dos posts do Blog DesComp – Descomplicando a Computação é mostrar o como fazer (prática) de uma forma simples e sem se preocupar no aprofundamento teórico em um primeiro momento, vamos ao handson.

XML SQL no ORACLEBram Naus

O XML (eXtensible Markup Language) é uma linguagem de marcação, recomendada pela World Wide Web Consortium (W3C), utilizada para a geração de documentos com dados organizados hierarquicamente. Nada mais é do que um texto formatado com tags (rótulos) de marcação para identificação dos dados, que são organizados de uma forma hierárquica, sendo muito semelhante a linguagem HTML.

Dentro da filosofia dos posts do Blog DesComp, que tem o intuito de abordar os tópicos de uma forma simples e prática, deixando para um segundo momento as nuances teóricas mais pesadas, o objetivo e diferencial deste post será a geração de Arquivo XML por query SQL no Banco de Dados ORACLE usando apenas SELECT com as opções do Oracle XML DB, que segue as funções do padrão do SQLX, disponível a partir da versão 9i Release 2.

Primeiramente, é importante definir a estrutura hierárquica que será utilizada na geração do XML, será uma listagem de funcionários extraída do modelo de exemplo do ORACLE sobre recursos humanos – denominado de HR, onde cada funcionário poderá apresentar as seguintes marcações:

  • id (identificador do funcionário);
  • seu nome (concatenação do first_name e last_name),
  • o nome do departamento que está alocado;
  • o nome do cargo;
  • e seu salário.

A representação [valor] apenas indica que estes espaços serão substituídos por cada dado de um determinado funcionário, já a representação … indica que se na base de dados tivermos 106 funcionários, teremos no XML 106 divisões <funcionario> </funcionario> com seus respectivos dados. Lembrando cada marcação tem que ter sua abertura e seu fechamento, ou abre tag, fecha tag, exemplo: abre nome: <nome>, fecha nome: </nome>.

Abaixo a ilustração do modelo que será utilizado:

1o. passo: Iniciando o passo a passo para a geração de Arquivo XML por query SQL no Banco de Dados ORACLE é montada a query (consulta) que retorna os dados previstos sem se preocupar com o formato XML, abaixo o SELECT com JOINs que retornam os dados que serão utilizados:

A execução deste SELECT retorna 106 registros:

2o. passo: adicionar à query SELECT o XMLELEMENT, responsável em adicionar as tags de abre e fecha para cada valor, entre aspas vem o título da tag e posteriormente separado pela vírgula vem o campo do respectivo valor. O apelido das colunas pode ou não ser mantido, lembrando que este pode ter um nome diferente ao da tag, mas prevalecerá o nome da tag na geração do XML:

A execução deste SELECT trará o seguinte resultado:

3o. passo: para criar a tag que abre e fecha cada funcionário, será necessário envolver todos os valores em um XMLELEMENT, nomeando essa tag de funcionarios:

Agora o retorno do SELECT será dado em uma única coluna, pois no momento que é criado o XMLELEMENT envolvendo os valores, os mesmos são aglutinados. Mas, ainda cada registro é retornado em uma linha individual:

4o. passo: agora é necessário aglutinar todas as linhas em uma só linha, obviamente mantendo cada registro com o abre e fecha da tag funcionario:

Agora o resultado da execução do SELECT será apenas uma linha contendo todos os funcionários listados em uma única coluna e linha:

5o. passo: neste passo é necessário adicionar um XMLELEMENT por fora do XMLAGG, para que seja criada a abertura e fechamento da tag de listagem de funcionários, no caso denominada de funcionarios:

O resultado da aplicação deste SELECT será idêntico ao anterior acrescido da tag de abertura e fechamento da listagem funcionarios, em uma única linha e coluna:

6o. passo: Chegou o momento de fechar o arquivo colocando o cabeçalho do XML, a tag XMLROOT realiza esse processo, antes do seu fechamento é importante indicar o parâmetro VERSION, como ilustrado no SELECT a seguir:

O resultado da execução deste último SELECT será acrescido cabeçalho do arquivo XML:

Editando a coluna resultante no ORACLE SQL Developer será possível ver o arquivo XML no formato hierárquico visual, como ilustrado abaixo:

7o. passo: para finalizar é só copiar o conteúdo XML gerado para um editor comum de textos e salvar o arquivo com um nome com extensão XML.

Resumindo o que em uma linguagem de programação como java, .NET, PHP, entre outras; levaríamos horas para programar e ter esse resultado, fazendo diretamente a geração de Arquivo XML por query SQL no Banco de Dados ORACLE podemos fazer em minutos. Isso reflete na variável tempo de desenvolvimento que muitas vezes interfere diretamente na variável custo.

A biblioteca apresentada contém mais recursos do que os que foram necessários para realizar esse  handson, existe uma excelente documentação no próprio site da ORACLE para que m quiser usar outros recursos dos arquivos XML ou se aprofundar no assunto.

Uma outra vertente que vem sendo explorada na questão de arquivos de transmissão, são os baseados em JSON (JavaScript Object Notation), que já vem sendo explorado nos bancos de dados, assunto que exploraremos em um breve futuro.

Esperamos  que o conteúdo tenha atendido às expectativas.

Professor e Consultor de TI, especialidades voltadas à Banco de Dados, Modelagem de Dados, Desenvolvimento de Sistemas voltados a WEB e Aprendizado de Máquina. Possui mestrado em Ciência da Computação, especialização em Gestão Integrada de Pessoas e Sistemas de Informação e graduação em Análise de Sistemas.

Leave a reply:

Your email address will not be published.