Está en la página 1de 5

ORACLE y la persistencia de archivos XML

Desde la versin 9 de Oracle se ofrece soporte de datos nativos a la informacin que se encuentra
almacenada en formato XML. Oracle soporta todos los mtodos de definicin, estructura y
transformacin de datos XML (tales como XSD, XSLT, XPATH, XQUERY, entre otros). Para el
almacenamiento de los archivos XML se utilizan formato Character Large Objects (CLOB) que
permite almacenar texto en grandes cantidades sin prdida de informacin.

Posteriormente con la aparicin de la versin 11.2 se introduce un nuevo modo de


almacenamiento de XML de defecto llamada BinaryXML, que tiene como objetivo reducir palabras
o etiquetas que generen informacin redundante y sin sentido dentro del archivo XML,
reduciendo el esfuerzo para el motor de base de datos de interpretar el documento XML para
extraer la informacin que se encuentra all representada.

Para que Oracle pueda realizar el proceso de parsing de la informacin XML existe un componente
denominado XDB, el cual tiene dos funciones principales: La primera es XMLType, la cual contiene
toda la sintaxis para realizar toda la manipulacin, registro, validacin o transformacin de los
archivos XML y la segunda es el repositorio XML DB en donde se encuentra la sintaxis para realizar
persistencia, versionamiento y control de acceso de los archivos XML. Para validar si en el
esquema de base de datos se encuentra registrado el componente Oracle XML DB basta con
ejecutar la siguiente consulta: select comp_name, status from dba_registry where
comp_name='Oracle XML Database'; la cual retorna el nombre del componente (Oracle XML
Database) y su estado (Debe tener estado valid).

Una vez validado que el componente XML DB est activo se procede a generar el esquema de
validacin. Este esquema busca describir la estructura de los XML que recibir para el tratamiento
de los datos de una tabla particular. En este esquema se definen no solo los campos que deben
registrarse en la base de dates sino que se especifica el tipo de dato que debern recibir e
inclusive validaciones de los datos mnimos y mximos esperados para los campos. A continuacin
se puede ver un ejemplo de la estructura del esquema de la tabla Reserva:

Fig x. Esquema XSD para la estructura de la tabla RESERVA


Para que el motor de base de datos reconozca el esquema creado anteriormente se debe invocar
el procedimiento almacenado DBMS_XMLSCHEMA.REGISTERSCHEMA, incluyendo dentro de la
definicin del mismo el nombre del esquema, su formato de encoding y el contenido completo del
archivo xsd:

Para esto se detallan los siguientes parmetros:

Local: Si el valor de este parmetro es si entonces se almacenar en la carpeta


correspondiente al owner del esquema de la base de datos
Gentype: Si el valor es verdadero se crear un objeto de tipo ObjecTable que se basar en
las reglas definidas por el esquema, de lo contrario se crear la tabla de forma manual
Genbeans: Si su valor es verdadero se generar un JavaBean al crear el archivo XSD
Force: Si su valor es verdadero omitir problemas en el registro del archivo XSD
Posteriormente se procede a crear la tabla con base en el archivo xsd generado para pedidos de,
teniendo en cuenta que para el caso del ejemplo FRICCIO es el nombre del dueo del esquema de
bases de datos:

Para el ejemplo la tabla reserva se compone de un campo de tipo XMLType que ser almacenado
como Binary XML, el cual internamente en la base dedatos se guarda como un SecureFile LOB.
Para efectos de validar la consistencia de la nueva tabla se procede a insertar un registro en la
tabla Reserva que no cumpla la definicin del esquema pedidos.xsd para observar su
comportamiento:

Como se puede ver en el ejemplo existe un error porque el campo del cdigo de pedido no se
incluye en la etiqueta denominada pedido. La forma correcta para realizar la insercin de datos es
la siguiente:
Con respecto a las actualizaciones de registros en la tabla reserva hay que considerar de igual
forma que en la insercin que el documento xml interno est bien formado con respecto a las
definiciones del esquema XSD. A continuacin un ejemplo de una actualizacin en la tabla
Reserva:

Si se desea actualizar el mismo valor en elementos diferentes del archivo embebido XML por
medio de la misma consulta basta con especificar el id de las etiquetas padre. A continuacin un
ejemplo de como se puede realizar actualizacin del valor del elemento pu en los pedidos con
cdigo 1 y 3 asignando nuevo valor 20:
Si se desea eliminar elementos dentro del xml interno basta con utilizar la funcin deletexml
indicando el nombre del campo y los elementos a eliminar. El siguiente ejemplo busca eliminar los
pedidos con cdigo 1 y 3 del XML del campo pedidos de la tabla reserva:

También podría gustarte