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.