xml en oracle 10g

42
SQL/XML Bases de Datos Avanzadas

Upload: miguelangelmirandarios1109

Post on 06-Feb-2016

252 views

Category:

Documents


1 download

DESCRIPTION

XML en Oracle 10g

TRANSCRIPT

Page 1: XML en Oracle 10g

SQL/XMLBases de Datos Avanzadas

Page 2: XML en Oracle 10g

ALMACENAMIENTO Y GESTIÓN DE DATOS XML

Base de Datos Relacionales extendidas con soporte XML -SGBDR-

Base de Datos XML Nativas -NXDB-

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.

Silvina Migani
fijate la que sigue
Page 3: XML en Oracle 10g

ALMACENAMIENTO Y GESTIÓN DE DATOS XML

Base de Datos Relacionales extendidas con soporte XML -SGBDR-

Base de Datos XML Nativas -NXDB-

Hoy en dia, es evidente la supremacía de los SGBDRs para 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.

Page 4: XML en Oracle 10g

ALMACENAMIENTO Y GESTIÓN DE DATOS XML

SQL/XML •Permite almacenar los documentos XML en base de datos objeto/relacionales, para consultar dichos documentos mediante XPath, XQuery y presentar los datos SQL en un formato de documentos XML.•El primer estándar SQL/XML (2003), se publicó por la ISO, como la parte 14 del estándar SQL: ISO/IEC 9075-14:2003.

Oracle •Permite generar datos XML desde sus tablas relacionales de dos maneras diferentes:• Por un lado, haciendo uso de las funciones propias del SQL/XML• Exportando en formato XML el resultado de una consulta SQL.

Silvina Migani
yo no pondria este punto porque habla de un subconjunto de las funcionalidades qe oracle permite. directamente pasaria a la siguiente pagina que si las describe mejor.
Page 5: XML en Oracle 10g

FUNCIONES DE SQL/XML

Funciones del estándar suministradas por ORACLE SQL/XML:• X

MLElement

• XMLForest

• XMLConcat

• XMLAttributes

• XMLAgg

Funciones propias de Oracle para generar datos XML con datos procedentes de la BD relacional relacionales:• S

YS_XMLGEN()

• XMLSEQUENCE()

• XMLCOLATTVAL()

• SYS_XMLAGG()

Funciones de manipulación de ORACLE: utilizando XPath y/o XQuery:• E

XTRACT()

• EXTRACTVALUE()

• EXISTSNODE()

• XMLSEQUENCE()

• XMLQUERY() (en estándar)

• XMLTABLE() (en estándar)

• UPDATEXML()

• DELETEXML()

Silvina Migani
me parece mejor asi, porque de ultima todos los datos estan en la bd relacional, te parece?
Page 6: XML en Oracle 10g

GENERACIÓN DE DATOS XML A PARTIR DE DATOS RELACIONALES

Page 7: XML en Oracle 10g

FUNCIONES DEL ESTÁNDAR SUMINISTRADAS POR ORACLE SQL/XML

XMLELEMENT

•Crea un fragmento de un documento XML desde datos relacionales. Los nombres de los elementos se insertan en la expresión. Los valores de las columnas se convierten en valores de texto del elemento. Las instancias anidadas de XMLELEMENT se utilizan para crear documentos XML bien formados.

XMLFOREST

•Crea fragmentos de documentos XML desde datos relacionales. Por defecto, cada nombre de columna se convierte en nombre de un elemento y cada valor de columna en el valor de texto del elemento. Las instancias anidadas de XMLELEMENT y XMLFOREST se utilizan para formar documentos XML bien formados.

XMLATTRIBUTE

S

•Una expresión anidada de XMLELEMENT(). Proporciona una lista de atributos para un elemento como pares de valores. Los nombres de los atributos se pueden insertar dentro de la expresión. Por defecto, los nombres de las columnas se convierten en nombres de atributos y los valores de las columnas en valores de atributos.

Page 8: XML en Oracle 10g

FUNCIONES DEL ESTÁNDAR SUMINISTRADAS POR ORACLE SQL/XML

XMLAGG

•Crea un agregado de fragmentos de un documento XML desde una colección de objetos XMLType separados. SYS_XMLAGG anida el resultado dentro del elemento raíz ROWSET, XMLAGG no hace esto.

XMLCONCA

T

•Produce también atributos para las columnas, pero con una diferencia importante. La función XMLCOLATTVAL () produce un elemento denominado column para cada valor de columna y un atributo denominado name para cada nombre de columna. El valor de la columna es el valor de texto del elemento.

Page 9: XML en Oracle 10g

FUNCIÓN XMLELEMENT()

SELECT XMLELEMENT(“Nombre _elemento", XMLELEMENT(“Nombre_subelemento”, nombre_columna)).getstringval() as "Resultado" FROM Tabla;

<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>

Por cada fila seleccionada se crea un fragmento XML

La función XMLELEMENT(), permite que se especifique un nombre para el elemento

Page 10: XML en Oracle 10g

FUNCIÓN XMLELEMENT()

Por cada fila seleccionada se crea un fragmento XML

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

Page 11: XML en Oracle 10g

FUNCIÓN XMLELEMENT()

SELECT XMLELEMENT(“Nombre _elemento", XMLELEMENT(“Nombre_subelemento”, funcion_agregadas(nombre_columna))).getstringval() as "Resultado" FROM Tabla;

<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>

Por cada fila seleccionada se crea un fragmento XML

La función XMLELEMENT(), permite que se especifique un nombre para el elemento

Page 12: XML en Oracle 10g

FUNCIÓN XMLELEMENT()

Por cada fila seleccionada se crea un fragmento XML

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>

Page 13: XML en Oracle 10g

FUNCIÓN XMLELEMENT() Y XMLATTRIBUTES()

SELECT XMLELEMENT(“Nombre _elemento", XMLATTRIBUTES(Nombre_columna as “Nombre_atributo”),XMLELEMENT(“Nombre_subelemento”,nombre_columna)).getstringval() as "Resultado" FROM Tabla;

<Nombre_elemento Nombre_atributo=“Contenido de la columna es el valor”><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento>Nombre_elemento Nombre_atributo=“Contenido de la columna es el valor”><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento>Nombre_elemento Nombre_atributo=“Contenido de la columna es el valor”><Nombre_subelemento>Contenido de la columna es el valor textual</Nombre_subelemento></Nombre_elemento>

Por cada fila seleccionada se crea un fragmento XML

Page 14: XML en Oracle 10g

FUNCIÓN XMLELEMENT() Y XMLATTRIBUTES()

Por cada fila seleccionada se crea un fragmento XML

Page 15: XML en Oracle 10g

FUNCIÓN XMLFOREST()

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>

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.

Page 16: XML en Oracle 10g

FUNCIÓN XMLFOREST()

Page 17: XML en Oracle 10g

FUNCIÓN XMLELEMENT() Y XMLAGG()

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>

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.

Page 18: XML en Oracle 10g

FUNCIÓN XMLELEMENT() Y XMLAGG()

Page 19: XML en Oracle 10g

FUNCIÓN XMLELEMENT() Y XMLCOLATTVAL()

SELECT XMLELEMENT(“Nombre_elemento", XMLCOLATTVAL(Nombre_columna1,Nombre_columna2)).getstringval()as "Resultado"FROM Tabla;

<Nombre_elemento><column name = “Nombre_columna1">Contenido de la columna1 es el valor textual </column><column name = "Nombre_columna2"> Contenido de la columna2 es el valor textual </column></Nombre_elemento><Nombre_elemento><column name = “Nombre_columna1">Contenido de la columna1 es el valor textual </column><column name = "Nombre_columna2"> Contenido de la columna2 es el valor textual </column></Nombre_elemento>

Por cada fila seleccionada se crea un fragmento XML

Page 20: XML en Oracle 10g

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.

Page 21: XML en Oracle 10g

ALMACENAMIENTO DE DATOS XML Y CONSULTAS EN UN MOTOR DE BASE DE DATOS EXTENDIDO

Page 22: XML en Oracle 10g

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 Tablespace Quota for HR_XML ALTER USER HR_XML QUOTA UNLIMITED ON USERS;

Page 23: XML en Oracle 10g

ALMACENAMIENTO DE DATOS XML Y CONSULTAS EN UN MOTOR DE BASE DE DATOS EXTENDIDO

Create table hr_xml.empcom(id number(6)primary key,datos_emp XMLTYPE,departamento number(4));insert into hr_xml.empcom1(id,datos_emp,departamento)Select employee_id,XMLELEMENT("datos_de_empleado",XMLELEMENT("apellido_nombre",last_name||' '||first_name),XMLELEMENT("mail",email)).getstringval(),department_idFrom hr.employees;

Page 24: XML en Oracle 10g

FUNCIONES DE MANIPULACIÓN DE ORACLE: UTILIZANDO XPATH Y/O XQUERY:

EXTRACT •Retorna un fragmento de un documento XML en un formato de tipo de dato XMLType desde una expresión XPath.

EXTACTVALUE •Retorna un valor escalar desde una expresión XPath.

EXISTSNODE •Si el resultado de una expresión XPath devuelve cualquier nodo, la función retorna verdadero.

Page 25: XML en Oracle 10g

FUNCIÓN EXTRACT()

SELECT Nombre_columna, extract(Nombre_columna_XMLTYPE,‘XPath’)FROM Tabla_XML;

Nombre_columna Nombre_columna_XMLTYPE

Contenido_columna (oraxml)

Contenido_columna (oraxml)

Page 26: XML en Oracle 10g

FUNCIÓN EXTRACT()

Consulta: Devolver el id y los datos de los empleados

Page 27: XML en Oracle 10g

FUNCIÓN EXTRACT()

Consulta: Devolver el id y el mail de los empleados como xml

Page 28: XML en Oracle 10g

FUNCIÓN EXTRACT()

Consulta: Devolver el id del empleado con mail JRUSSEL

Page 29: XML en Oracle 10g

FUNCIÓN EXTRACTVALUE()

SELECT Nombre_columna, extractvalue(Nombre_columna_XMLTYPE,‘XPath’)FROM Tabla_XML;

Nombre_columna Nombre_columna_XMLTYPE

Contenido_columna Valor Textual de subelemento hoja

Contenido_columna Valor Textual de subelemento hoja

Page 30: XML en Oracle 10g

FUNCIÓN EXTRACTVALUE()

Consulta: Devolver el id y el mail de los empleados

Page 31: XML en Oracle 10g

FUNCIÓN EXTRACTVALUE()

Consulta: Devolver el id del empleado con mail JRUSSEL

Page 32: XML en Oracle 10g

FUNCIÓN EXTRACTVALUE()

Consulta: Obtener los datos del empleado con mail JRUSSEL

Page 33: XML en Oracle 10g

FUNCIÓN EXISTSNODE()

SELECT Nombre_columna, Nombre_columna_XMLTYPEFROM Tabla_XMLWHERE existsnode(Nombre_columna_XMLTYPE ,‘XPath’)=1;

Nombre_columna Nombre_columna_XMLTYPE

Contenido_columna (oraxml)

Contenido_columna (oraxml)

Page 34: XML en Oracle 10g

FUNCIÓN EXISTSNODE()

Consulta: Devolver el id, datos del empleado y departamento del empleado con mail JRUSSEL

Page 35: XML en Oracle 10g

FUNCIONES DE MANIPULACIÓN DE ORACLE: UTILIZANDO XPATH Y/O XQUERY:

XMLQUERY

•La función XMLQuery permite construir o consultar datos XML.•XMLQUERY (•Expresión-XQuery•[ PASSING { BY REF I BY VALUE } argument-list ]•[RETURNING { CONTENT I SEQUENCE } [{ BY REF I BY VALUE }]]•NULL ON EMPTY I EMPTY ON EMPTY)

Page 36: XML en Oracle 10g

FUNCIÓN XMLQUERY()

SELECT Nombre_columna, XMLQUERY(‘XQUERY’ passing Nombre_columna_XMLTYPE returning content)FROM Tabla_XML;

Nombre_columna XML

Contenido_columna (oraxml)

Contenido_columna (oraxml)

Page 37: XML en Oracle 10g

FUNCIÓN XMLQUERY()

Consulta: Devolver el id de departamento junto al apellido y nombre de los empleados, de acuerdo a la siguiente estructura: <datos_emp ayn=“valor_atributo"></datos_emp>

Page 38: XML en Oracle 10g

GENERACIÓN DE DATOS RELACIONALES A PARTIR DE DATOS XML

Page 39: XML en Oracle 10g

FUNCIONES DE MANIPULACIÓN DE ORACLE: UTILIZANDO XPATH Y/O XQUERY:

•La función XMLTABLE puede tomar datos XML como entrada y producir una tabla relacional como salida. •Transforma datos XML en formato tabla.•Evalúa una expresión XQuery o XPath “ el patrón fila”.•Cada ítem del resultado es una fila.•Los valores de los elementos/atributos se mapean a valores de columna usando expresiones XPath “ el patrón columna”.•El nombre y tipo de dato tienen que especificarse.

Page 40: XML en Oracle 10g

FUNCIÓN XMLTABLE()

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;

Nombre_columna1 Nombre_columna2

Valor textual de elemento o atributo

Valor textual de elemento o atributo

Valor textual de elemento o atributo

Valor textual de elemento o atributo

Page 41: XML en Oracle 10g

FUNCIÓN XMLTABLE()

Consulta: Obtener una tabla con los datos de los empleados

Page 42: XML en Oracle 10g

FUNCIÓN XMLTABLE()

Consulta: Obtener una tabla con los datos del empleado con mail JRUSSEL