lunes, 23 de diciembre de 2013

Obtener el valor de un nodo de un xml en Oracle

Espero por vuestro bien que a nadie se le haya ocurrido guardar un fichero xml con una serie de datos que vayas a necesitar en un blob... pero si a alguno de vuestros compañeros le ha poseido Satán y ha hecho tan atroz fechoría os dejo una forma de obtener dichos datos.

Supongamos que tenemos una tabla_del_demonio con un id y un campo_blob. Para el id 1816 dentro del campo blob guardas un fichero xml de este tipo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<attributes xmlns="http://www.sat.an/attributes/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:ns3="http://www.sat.an/attributes/trabajadores/1.0">
    <trabajador>
        <nombre>Daniel</nombre>
        <apellido1>Garcia</apellido1>
        <apellido2>Fernandez</apellido2>
        <ns3:dni>123456789B</ns3:dni>
    </specificData>
</attributes>

Para quedarnos con el valor del dni habría que hacer lo siguiente:

select extractvalue(X.XML, '/attributes/trabajador/ns3:dni', 'xmlns="http://www.sat.an/attributes/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:ns3="http://www.sat.an/attributes/trabajadores/1.0"')
from (select XMLType(campo_blob,178) XML
  from tabla_del_demonio
  where id=1816) X;

No hay comentarios:

Publicar un comentario