430 likes | 662 Views
SQL/XML. Bases de Datos Avanzadas. Almacenamiento y Gestión de datos XML. Generalmente los datos se almacenan empleando SGBDR, y para gestionar y consultarlos se utiliza el lenguaje SQL .
E N D
SQL/XML Bases de Datos Avanzadas
Almacenamiento y Gestión de datos XML Generalmente los datos se almacenan empleando SGBDR, y para gestionar y consultarlos se utiliza el lenguaje SQL. En la actualidad, se hace uso de XML para representar los datos de una manera más natural, y necesitan un nuevo lenguaje para la gestión y consulta de los datos; un lenguaje que tenga en cuenta la estructura de un documento XML, así como los valores de sus datos.
Almacenamiento y Gestión de datos XML Hoy en dia, es evidente la supremacía de los SGBDRspara almacenar, actualizar y consultar datos haciendo uso del lenguaje SQL. Sin embargo, actualmente se presentan situaciones en las que se hace necesaria la utilización de datos XML. Así nacen los SGBDR extendidas para dar soporte a XML, que además de dar la posibilidad de almacenar este nuevo tipo de datos, también permite gestionarlos a través de una extensión del lenguaje SQL tradicional.
<Nombre_elemento><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • <Nombre_elemento><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • <Nombre_elemento><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • SELECT XMLELEMENT(“Nombre _elemento", XMLELEMENT(“Nombre_subelemento”, nombre_columna)).getstringval() as "Resultado" • FROM Tabla; • Función XMLELEMENT() La función XMLELEMENT(), permite que se especifique un nombre para el elemento Por cada fila seleccionada se crea un fragmento XML
Función XMLELEMENT() La función getstringval recupera un documento en forma de VARCHAR (por defecto el tamaño del buffer es de 4000 byte) getclobval() permite trabajar con más de 4000 Bytes o caracteres Por cada fila seleccionada se crea un fragmento XML
<Nombre_elemento><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • <Nombre_elemento><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • <Nombre_elemento><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • SELECT XMLELEMENT(“Nombre _elemento", XMLELEMENT(“Nombre_subelemento”, funcion_agregadas(nombre_columna))).getstringval() as "Resultado" • FROM Tabla; • Función XMLELEMENT() La función XMLELEMENT(), permite que se especifique un nombre para el elemento Por cada fila seleccionada se crea un fragmento XML
Función XMLELEMENT() Consulta: Devolver el id de departamento junto a la cantidad de empleados, de acuerdo a la siguiente estructura <Departamento><ID>…</ID> <Cant_empleados>…</Cant_empleados> </Departamento> Por cada fila seleccionada se crea un fragmento XML
<Nombre_elementoNombre_atributo=“Contenido de la columna es el valor”><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • Nombre_elementoNombre_atributo=“Contenido de la columna es el valor”><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • Nombre_elementoNombre_atributo=“Contenido de la columna es el valor”><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento> • SELECT XMLELEMENT(“Nombre _elemento", XMLATTRIBUTES(Nombre_columna as “Nombre_atributo”),XMLELEMENT(“Nombre_subelemento”,nombre_columna)).getstringval() as "Resultado" • FROM Tabla; • Función XMLELEMENT() y XMLATTRIBUTES() Por cada fila seleccionada se crea un fragmento XML
Función XMLELEMENT() y XMLATTRIBUTES() Por cada fila seleccionada se crea un fragmento XML
SELECT XMLFOREST(Nombre_columna1).getstringval() as “Resultado" • FROM Tabla; • <Nombre_columna1><Contenido de la columna es el valor textual</Nombre_columna1> • <Nombre_columna1><Contenido de la columna es el valor textual</Nombre_columna1> • <Nombre_columna1><Contenido de la columna es el valor textual</Nombre_columna1> • Función XMLFOREST() Todos los elementos se encuentran anidados al mismo nivel. Está función, es una forma fácil de retornar un fragmento que será parte de un documento XML agregado o concatenado, pero no es útil para crear documentos XML por sí solo.
SELECT XMLELEMENT(“Nombre_elemento_raiz", XMLAGG(XMLELEMENT(“Nombre_subelemento“, Nombre_columna))).getstringval() as "Resultado" • FROM Tabla; • <Nombre_elemento_raiz> • <Nombre_subelemento><Contenido de la columna es el valor textual</Nombre_subelemento> • <Nombre_subelemento><Contenido de la columna es el valor textual</Nombre_subelemento> • <Nombre_subelemento><Contenido de la columna es el valor textual</Nombre_subelemento> • </Nombre_elemento_raiz> • Función XMLELEMENT() y XMLAGG() La función XMLAGG agrega filas múltiples de resultado en un documento XML, junto a la función XMLELEMENT permiten construir un documento XML.
SELECT XMLELEMENT(“Nombre_elemento", XMLCOLATTVAL( • Nombre_columna1,Nombre_columna2)).getstringval()as "Resultado" • FROM Tabla; • <Nombre_elemento> • <columnname = “Nombre_columna1">Contenido de la columna1 es el valor textual </column> • <columnname = "Nombre_columna2"> Contenido de la columna2 es el valor textual </column> • </Nombre_elemento> • <Nombre_elemento> • <columnname = “Nombre_columna1">Contenido de la columna1 es el valor textual </column> • <columnname = "Nombre_columna2"> Contenido de la columna2 es el valor textual </column> • </Nombre_elemento> • Función XMLELEMENT() y XMLCOLATTVAL() Por cada fila seleccionada se crea un fragmento XML
Función XMLELEMENT() y XMLCOLATTVAL() • Crea elemento/s denominado/s column para cada valor de columna/s y un atributo denominado name para cada nombre de columna/s. El valor de la columna es el valor de texto del elemento.
Almacenamiento de datos XML y consultas en un motor de base de datos extendido
Almacenamiento de datos XML y consultas en un motor de base de datos extendido CREATE USER HR_XML IDENTIFIED BY VALUES 'D199B3E88E3FA920' DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK; -- 1 TablespaceQuotafor HR_XML ALTER USER HR_XML QUOTA UNLIMITED ON USERS;
Almacenamiento de datos XML y consultas en un motor de base de datos extendido Createtablehr_xml.empcom (id number(6)primarykey, datos_emp XMLTYPE, departamento number(4)); insertinto hr_xml.empcom1(id,datos_emp,departamento) Selectemployee_id,XMLELEMENT("datos_de_empleado", XMLELEMENT("apellido_nombre",last_name||' '||first_name), XMLELEMENT("mail",email)).getstringval(),department_id Fromhr.employees;
Funciones de manipulación de ORACLE: utilizando XPath y/o XQuery:
SELECT Nombre_columna, extract(Nombre_columna_XMLTYPE,‘XPath’) • FROM Tabla_XML; • Función extract()
Función extract() Consulta: Devolver el id y los datos de los empleados
Función extract() Consulta: Devolver el id y el mail de los empleados como xml
Función extract() Consulta: Devolver el id del empleado con mail JRUSSEL
SELECT Nombre_columna, extractvalue(Nombre_columna_XMLTYPE,‘XPath’) • FROM Tabla_XML; • Función extractVALUE()
Función extractVALUE() Consulta: Devolver el id y el mail de los empleados
Función extractVALUE() Consulta: Devolver el id del empleado con mail JRUSSEL
Función extractVALUE() Consulta: Obtener los datos del empleado con mail JRUSSEL
SELECT Nombre_columna, Nombre_columna_XMLTYPE • FROM Tabla_XML • WHERE existsnode(Nombre_columna_XMLTYPE ,‘XPath’)=1; • Función EXISTSNODE()
Función EXISTSNODE() Consulta: Devolver el id, datos del empleado y departamento del empleado con mail JRUSSEL
Funciones de manipulación de ORACLE: utilizando XPath y/o XQuery:
SELECT Nombre_columna, XMLQUERY(‘XQUERY’ • passing Nombre_columna_XMLTYPEreturning content) • FROM Tabla_XML; • Función XMLQUERY()
Función XMLQUERY() Consulta: Devolver el id de departamento junto al apellido y nombre de los empleados, de acuerdo a la siguiente estructura: <datos_empayn=“valor_atributo"></datos_emp>
Funciones de manipulación de ORACLE: utilizando XPath y/o XQuery:
SELECT Nombre_columna1,Nombre_columna2,XMLTABLE(‘XQUERY’ • passing Nombre_columna_XMLTYPE • COLUMNS Nombre_columna1 tipo PATH ‘Nombre_elemento1 o @Nombre_atributo’, • Nombre_columna2 tipo PATH ‘Nombre_elemento2’ returning content) • FROM Tabla_XML; • Función XMLTABLE()
Función XMLTABLE() Consulta: Obtener una tabla con los datos de los empleados
Función XMLTABLE() Consulta: Obtener una tabla con los datos del empleado con mail JRUSSEL