Parser SAX no Oracle com Java

[ad#texto]

Quem já trabalhou com XML no Oracle já deve ter utilizado o XMLType, este cara implementa DOM para fazer o parser e por uma série de motivos não existe uma implementação para parser SAX no PL/SQL, daí esbarramos que em alguns casos ao efetuar o parser o DOM se torna lento, principalmente um arquivo XML grande, como resolver essa situação?

A melhor saída então é criar uma classe Java no próprio bando de dados Oracle e esta classe irá realizar o parser de um CLOB informado e assim resolver os problemas de lentidão deste processo, a classe Java ficaria assim:

create or replace  java source
named "Validar" as

import java.sql.*;
import java.io.*;
import java.lang.String;
import oracle.xml.sql.dataset.*;
import oracle.xml.sql.query.*;
import oracle.xml.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
import oracle.xml.parser.schema.*;
import oracle.xml.parser.v2.*;
import org.xml.sax.*;
import org.w3c.dom.*;

/**
* Classe para implementar parser Sax no Oracle. Devido ao fato do PL/SQL não
* conter nativamente um parser Sax o mesmo foi implementado em Java. Este
* processo é recomendado para a execução de Sax no Oracle via OTN.
*
* @author Petter
* @since Março/2013
* @version 0.5
*/

public class Validar {

public static String validarCLOB(oracle.sql.CLOB xmldoc) {
 SAXParser parser = new SAXParser();

 try {
  parser.parse(new ByteArrayInputStream(xmldoc.getBytes()));
  return "1";
 } catch (SAXException e) {
  return "0 - " + e.getMessage();
 } catch (Exception e) {
  return "Erro: " + e.getMessage();
 }
}
}

Isso irá criar uma classe Java no Oracle que simplesmente irá ser invocada por uma função que irá receber um CLOB que deverá “conter o XML” e irá retornar um VARCHAR2 com o retorno de 1 para caso de sucesso ou informar o erro caso ocorra algum. Veja como ficará a função:

CREATE OR REPLACE FUNCTION validarCLOB(xmldoc CLOB)
return varchar2
 AS LANGUAGE JAVA NAME 'Validar.validarCLOB(oracle.sql.CLOB)
  returns java.lang.String';

Bem simples, basta então invocar a função e pronto, seu XML irá passar pelo parser SAX.

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.