xml en oracle 10g

Post on 06-Feb-2016

254 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

XML en Oracle 10g

TRANSCRIPT

SQL/XMLBases de Datos Avanzadas

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

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.

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.

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?

GENERACIÓN DE DATOS XML A PARTIR DE DATOS RELACIONALES

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.

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.

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

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

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

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>

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

FUNCIÓN XMLELEMENT() Y XMLATTRIBUTES()

Por cada fila seleccionada se crea un fragmento XML

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.

FUNCIÓN XMLFOREST()

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.

FUNCIÓN XMLELEMENT() Y XMLAGG()

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

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

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;

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.

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)

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

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

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

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)

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:

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)

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)

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>

GENERACIÓN DE DATOS RELACIONALES A PARTIR DE DATOS XML

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.

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

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

top related