Pular para o conteúdo

Extraindo um Documento XML a Partir de uma Base Relacional (1)

Extraindo um Documento XML a Partir de uma Base Relacional (1)

É muito comum as aplicações recuperarem dados de um banco de dados e transformar os dados recebidos em um arquivo .xml, para vários fins. Neste post, vou mostrar como pular a etapa de a aplicação converter o resultset em um xml, fazendo com que o próprio Oracle retorne o xml desejado.

Seja a tabela COUNTRIES do esquema HR com a seguinte estrutura:

  • country_id (char(2) not null)
  • country_name (varchar2(40))
  • region_id (number)

e com os seguintes dados:

AR Argentina 2
AU Australia 3
BE Belgium 1
BR Brazil 2
CA Canada 2
CH Switzerland 1
CN China 3
DE Germany 1
DK Denmark 1
EG Egypt 4
FR France 1
HK HongKong 3
IL Israel 4
IN India 3
IT Italy 1
JP Japan 3
KW Kuwait 4
MX Mexico 2
NG Nigeria 4
NL Netherlands 1
SG Singapore 3
UK United Kingdom 1
US United States of America 2
ZM Zambia 4
ZW Zimbabwe 4

Vamos extrair um xml simples, que contem simplesmente o conteúdo desta tabela. Observe o comando SQL a seguir:

SQL
SELECT XMLElement("Countries",
XMLAttributes(country_id as COD),
XMLForest(country_name as NOME,region_id as REGIAO)
),
extract('/*') as XML
FROM HR.COUNTRIES;

O resultado será:

XML
<Countries><NOME>Argentina</NOME><REGIAO>2</REGIAO></Countries>
<Countries><NOME>Australia</NOME><REGIAO>3</REGIAO></Countries>
<Countries><NOME>Belgium</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>Brazil</NOME><REGIAO>2</REGIAO></Countries>
<Countries><NOME>Canada</NOME><REGIAO>2</REGIAO></Countries>
<Countries><NOME>Switzerland</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>China</NOME><REGIAO>3</REGIAO></Countries>
<Countries><NOME>Germany</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>Denmark</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>Egypt</NOME><REGIAO>4</REGIAO></Countries>
<Countries><NOME>France</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>HongKong</NOME><REGIAO>3</REGIAO></Countries>
<Countries><NOME>Israel</NOME><REGIAO>4</REGIAO></Countries>
<Countries><NOME>India</NOME><REGIAO>3</REGIAO></Countries>
<Countries><NOME>Italy</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>Japan</NOME><REGIAO>3</REGIAO></Countries>
<Countries><NOME>Kuwait</NOME><REGIAO>4</REGIAO></Countries>
<Countries><NOME>Mexico</NOME><REGIAO>2</REGIAO></Countries>
<Countries><NOME>Nigeria</NOME><REGIAO>4</REGIAO></Countries>
<Countries><NOME>Netherlands</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>Singapore</NOME><REGIAO>3</REGIAO></Countries>
<Countries><NOME>United Kingdom</NOME><REGIAO>1</REGIAO></Countries>
<Countries><NOME>United States of America</NOME><REGIAO>2</REGIAO></Countries>
<Countries><NOME>Zambia</NOME><REGIAO>4</REGIAO></Countries>
<Countries><NOME>Zimbabwe</NOME><REGIAO>4</REGIAO></Countries>

É claro que podemos extrair XML mais complexos, a partir da junção de n tabelas, é só variar o comando usado neste exemplo.

Abraços

Mariângela Molina

Mariângela Molina

Mariângela Molina, formada em Ciência da Computação, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Modelagem de Dados e Programação para Banco de Dados; Trabalha com Oracle há 10 anos e é professora na Faculdade de Tecnologia de Mogi das Cruzes (Fatec-MC), onde ministra aulas de Banco de Dados e Laboratório de Banco de Dados..

Comentário(s) da Comunidade

  1. Parabéns pelo artigo Molina!

    Só para acrescentar como sugestão, acredito que uma estrutura mais semanticamente adequada seria:

    Argentina2

    Mais uma vez parabéns!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress