Caminho de Navegação Oracle / Artigos / Gerando arquivos XML através de Procedures PL/SQL

Oracle

 

Nenhuma avalição
Indique ao Ueba Indique ao BlogBlogs Indique ao Delicious Indique ao Technorati Indique ao Google Bookmarks Indique ao Newsgator
TAGS

Nenhuma tag foi definida ainda!

Defina as tags para esta página preenchendo o campo abaixo.

  • Máximo de 100 tags
  • Cada tag deve ter até 20 caracteres.
  • Separar as tags com virgula. Ex.: php, sql, html, xml, fireworks
COMENTAR

INDICAR
Nome do amigo: E-mail do amigo: Comentário:
REPORTAR ERRO Descreva o erro:

Gerando arquivos XML através de Procedures PL/SQLPostada em: 27/12/2004

Gisele Nair Reis Conceição
Por: Gisele Nair Reis Conceição Nº de Visualizações: 5592.



Gerando arquivos XML através de Procedures PL/SQL


A XML (eXtensible Markup Language, ou Linguagem de Marcação Estendida) é muito utilizada para a troca de informações entre sistemas diferentes. Como, por exemplo, posso ter uma aplicação Forms (ou em qualquer outra linguagem de programação como: Delphi, VB, Java...) em que o usuário não tenha acesso ao Banco de Dados, mas precise acessar as informações contidas nele, assim basta eu montar um select acessando a base e montar um arquivo XML com os resultados. Estes dados podem ser acessados por um arquivo em Flash, ou pode ser exibido como uma página Web (mas para isto será necessária a utilização de folhas de estilos (CSS) para que os dados possam aparecer formatados no Browser).

Segue abaixo um exemplo criado com os próprios pacotes do oracle 9i:

[CODE]
create or replace procedure p_geraxml
is
v_file Utl_File.File_Type;
v_xml CLOB;
v_more BOOLEAN := TRUE;
BEGIN
-- cria doc xml a partir da consulta
v_xml := DBMS_XMLQuery.GetXML('select * from emp');
-- gerar saída
v_file := Utl_File.FOpen('DIR_XML', 'test1.xml', 'w');
WHILE v_more LOOP
Utl_File.Put(v_file, Substr(v_xml, 1, 32767));
IF Length(v_xml) > 32767 THEN
v_xml := Substr(v_xml, 32768);
ELSE
v_more := FALSE;
END IF;
END LOOP;
Utl_File.FClose(v_file);

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(Substr(SQLERRM,1,255));
Utl_File.FClose(v_file);
END;
/
[/CODE]


Exemplo de documento XML.

<?xml version="1.0" ?>
<rowset>
    <row num="1">
        <nome>João da Silva</nome>
        <telefone>1</telefone>
        <idade>26</idade>
       <sexo>23</sexo>
       <admissao>10/05/2003</admissao>
    </row>
</rowset>
 



Obs : O exemplo acima só funciona no Oracle 9i, porém existe a possibilidade da isntalação do XDK para 8i, que ainda é um fato a ser estudado, porém segue abaixo outro exemplo criado no Oracle 8i,sem a utilização do XDK, mas que exige um conhecimento básico de XML:

[CODE]
PROCEDURE TESTE_XML IS
CURSOR cEMP IS SELECT * from emp;
DADOS_EMP cEMP%ROWTYPE;
vXML VARCHAR2(32767);
v_file Utl_File.File_Type;
BEGIN
open cEMP;
v_file := Utl_File.FOpen('DIR_XML','test1.xml','w');
vXML:='<?xml version="1.0" encoding="ISO8859-1"?>';
vXML:=vXML||'<DEPARTAMENTO>';
LOOP
FETCH cEMP INTO DADOS_EMP;
EXIT WHEN cEMP%NOTFOUND;
vXML:=vXML||'<EMPREGADO>';
vXML:=vXML||'<NOME>'||DADOS_EMP.NOME||'</NOME>';
vXML:=vXML||'<TELEFONE>'||DADOS_EMP.TELEFONE||'</TELEFONE>';
vXML:=vXML||'<IDADE>'||DADOS_EMP.IDADE||'</IDADE>';
vXML:=vXML||'<SEXO>'||DADOS_EMP.SEXO||' </SEXO>';
vXML:=vXML||' <ADMISSAO>'||DADOS_EMP.ADMISSAO||' </ADMISSAO>';
vXML:=vXML||'</EMPREGADO>';
END LOOP;
close cEMP;
vXML:=vXML||'</DEPARTAMENTO>';
Utl_File.Put(v_file, Substr(vXML, 1, 32767));
Utl_File.FClose(v_file);
END;
[/CODE]


Obs: Para a utilização do UTL_File, ele deve ser declarado no INIT.ORA, o que poderei explicar num próximo artigo.



Até a próxima,
Gisele Nair.