Laboratorio XML y ORACLE

Anuncio
Laboratorio XML y ORACLE
Objetivo: Probar algunas opciones que ofrece el SGBD ORACLE para trabajar con XML.
Usamos la aplicación SQLWorksheet que se encuentra en:
<Inicio><Programas><Oracle-OraClient10g_home1><Application Development><SQLPlus
Worksheet>
Cuenta.: ABDXX Password ABDXX Service: Erreala-10g
?
Para que en la aplicación SQLWorksheet con las consultas SQL se puedan leer filas largas
de XML, modifica su configuración con las siguientes operaciones:
>>> set long 1000
>>> set linesize 100
?
Crear las siguientes tablas:
CREATE TABLE Departamentos (codigo number(4) primary key, nombre
varchar2(20));
CREATE TABLE Empleados (dni number(8) primary key, nombre varchar2(20),
apellido1 varchar2(20), apellido2 varchar2(20), departamento number(4) references
Departamentos, telefono number(9));
?
Insertar tuplas en ambas tablas (introducir empleados sin teléfono)
?
Probar las siguientes sentencias sabiendo que:
Xmlelement(): crea un elemento XML
Xmlattributes(): crea atributos XML, a partir de los nombres de las columnas
Xmlforest(): crea elementos XML, a partir de los nombres de las columnas (elimina nulos)
Xmlconcat(): a partir de una lista de valores XML crea un único valor XML
Xmlagg(): combina una colección de filas y crea un valor XML (es una función de agregación)
Ejemplos
1. SELECT XMLElement("Documento", Dni).extract('/*') From Empleados;
2. SELECT XMLElement("NombreEmpleado",nombre ||' '|| apellido1 ||' '||
apellido2).extract('/*') From Empleados;
3. SELECT XMLElement("NombreEmpleado", nombre ||' '|| apellido1 ||' '||
apellido2).extract('/*'), XMLElement("Documento", dni).extract('/*') From Empleados;
4. SELECT XMLElement("NombreEmpleado", XMLATTRIBUTES (dni AS
"Documento"), nombre ||' '|| apellido1 ||' '|| apellido2).extract('/*') as Resultado From
Empleados;
5. SELECT XMLElement("Emp", XMLElement ("NombreEmpleado", nombre ||' '||
apellido1 ||' '|| apellido2).extract('/*'), XMLElement("Documento", dni)) From
Empleados;
6. Select XMLAGG( XMLElement ("NombreEmpleado", nombre ||' '|| apellido1 ||' '||
apellido2 )) From Empleados;
¿Cuál es la diferencia de resultado entre el ejemplo 2 y 6?
7. SELECT XMLForest (dni as "Documento").extract('/*') FROM Empleados;
8. SELECT XMLForest (telefono as "Telefono").extract('/*') FROM Empleados;
9. SELECT XMLForest (dni ||' '|| telefono as "Telefonos").extract('/*') FROM Empleados;
10. SELECT XMLConcat(XMLElement ("Nom", nombre), XMLElement ("Ape",
apellido1)).extract('/*') COL FROM Empleados;
?
Realizar la consulta que permita obtener en una sentencia XML para cada departamento
su nombre y seguidamente el nombre y primer apellido de todos los empleados que
tengan registrado un teléfono.
/********************************************************************/
?
?
?
?
Crear la siguiente tabla con una columna de tipo XML
CREATE TABLE TRABAJOS (Cod Number(4) PRIMARY KEY , Descripcion
XMLTYPE);
Ejecutar las siguientes instrucciones:
o INSERT INTO TRABAJOS VALUES (1,’<lista><proyecto cod=”1”
titulo=”Implementación BD”></proyecto>’); ¿Qué ocurre?
o INSERT INTO TRABAJOS VALUES (9, '<lista><proyecto
titulo="Implementacion
BD"><organismo>Diputacion</organismo></proyecto></lista>');
o Visualizar con apariencia XML las tuplas introducidas
Crear una nueva tabla a la que vamos a asociar un esquema XML
CREATE TABLE ALUMNOSFISS(Cod Number(4) PRIMARY KEY, Alumno
XMLTYPE) XMLType Column Alumno XMLSCHEMA
"http://xmlns.oracle.com/xdb/schemas/ILLARRAMENDI/www.ehu.es/dbd"
ELEMENT "elAlumno";
Insertar elementos en la tabla ALUMNOSFISS y visualizarlos. En la marca elAlumno
debeis introducir como atributos los siguientes espacios de nombre:
xmlns="http://www.ehu.es/dbd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ehu.es/dbd
http://xmlns.oracle.com/xdb/schemas/ILLARRAMENDI/www.ehu.es/dbd"
El XML Schema es el siguiente:
<?xml version="1.0"? encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.ehu.es/dbd" xmlns="http://www.ehu.es/dbd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="elAlumno" type="Alumno"/>
<xsd:complexType name="Alumno">
<xsd:sequence>
<xsd:element name="Nombre" type="xsd:string" />
<xsd:element name="Edad" type="xsd:integer" />
<xsd:element name="Asignatura" type="Asignatura" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Asignatura">
<xsd:sequence>
<xsd:element name="Titulo" type="xsd:string" />
<xsd:element name="Cuatrimestre" type="xsd:integer" />
</xsd:sequence>
<xsd:attribute name="Cod" type="xsd:integer" />
</xsd:complexType>
</xsd:schema>
Descargar