Criando um arquivo XML com Oracle PL/SQL
[ad#texto]
Escrever um XML utilizando uma procedure PL/SQL é bem simples, salvar este XML em uma pasta qualquer do servidor para intercambio de dados é mais simples ainda, segue um exemplo utilizando CLOB para armazenar o stream que será o arquivo XML e depois o mesmo é criado e salvo na pasta indicada utilizando o pacote DBMS_XSLPROCESSOR.
DECLARE
varClob CLOB;
varString VARCHAR2(4000);
BEGIN
-- Abre a instancia do CLOB e o coloca em modo de escrita
dbms_lob.createtemporary(varClob, TRUE);
dbms_lob.open(varClob, dbms_lob.lob_readwrite);
-- Variável string para armazenar parte do XML
varString := '' ||
'' ||
'Este é um teste ' ||
' ';
-- Cria um XML simples de testes, pode ser dado quantos APPEND quiser e
-- ir montando o XML durante sua rotina PL/SQL
dbms_lob.writeappend(varClob, length(varString), varString);
-- Aqui irá de fato gerar o arquivo físico do XML
DBMS_XSLPROCESSOR.CLOB2FILE(varClob, '/minha/pasta/', 'teste.xml', NLS_CHARSET_ID('UTF8'));
-- Liberar dados do CLOB da memória
dbms_lob.close(varClob);
dbms_lob.freetemporary(varClob);
END;
O exemplo é muito simples e didático, a novidade fica por conta do pacote DBMS_XSLPROCESSOR, no meu caso eu passei os seguintes parâmetros em ordem:
- Variável CLOB;
- Pasta de destino do arquivo XML;
- Nome do arquivo XML;
- Encoding, no exemplo eu utilizei UTF-8, mas pode ser utilizado qualquer outro.
Note que neste exemplo eu não efetuei nenhum parse, ou seja, o XML é gerado de forma bruta e qualquer anormalidade não será validada e consequentemente um XML inválido, uma solução mais refinada seria efetuar o parse do CLOB para evitar que alguma falha no XML comprometesse um processo posterior.
No próximo artigo irei melhorar este exemplo e mostrar como criar um XML submetendo-o antes de criar um arquivo a um parse.