Modelo objeto-relacional en Oracle ÍNDICE
Modelo objeto-relacional en Oracle ÍNDICE
Modelo objeto-relacional en Oracle ÍNDICE
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
TIPOS COLECCIÓN<br />
CREATE TYPE tipoNombres AS VARRAY(5) OF vARCHAR(20)<br />
CREATE TYPE tipoPlano AS OBJECT<br />
( plano_ID NUMBER,<br />
num_figuras NUMBER,<br />
arquitectos tipoNombres)<br />
CREATE TABLE Plano OF tipoPlano<br />
(PRIMARY KEY (plano_Id));<br />
CREATE OR REPLACE TYPE refTipoPlano AS OBJECT<br />
(refPlano REF tipoPlano)<br />
CREATE OR REPLACE TYPE NT_Planos AS TABLE OF<br />
refTipoPlano<br />
CREATE OR REPLACE TYPE tipoProyecto AS OBJECT<br />
( proyecto_ID NUMBER,<br />
nombre VARCHAR(30),<br />
ti<strong>en</strong>e_plano NT_Planos)<br />
/<br />
CREATE TABLE Proyecto OF tipoProyecto<br />
(PRIMARY KEY (proyecto_ID),<br />
UNIQUE (nombre))<br />
NESTED TABLE ti<strong>en</strong>e_plano STORE AS ListaPlanos;<br />
INSERT INTO Plano VALUES (1, 5,NULL);<br />
INSERT INTO Plano VALUES (2, 4,NULL);<br />
DECLARE<br />
p1_ref refTipoPlano;<br />
p2_ref refTipoPlano;<br />
--Se utilizan refer<strong>en</strong>cias a los dos nuevos<br />
--planos para introducir valores <strong>en</strong> la tabla<br />
--anidada creada<br />
BEGIN<br />
SELECT refTipoPlano(REF(p1)) INTO p1_ref<br />
FROM Plano p1 WHERE p1.plano_id=1;<br />
SELECT refTipoPlano(REF(p2)) INTO p2_ref<br />
FROM Plano p2 WHERE p2.plano_id=2;<br />
INSERT INTO Proyecto<br />
VALUES (1, 'MIDAS', NT_Planos (p1_ref, p2_ref));<br />
END;<br />
/<br />
TIPOS COLECCIÓN<br />
• Al definir una tabla tipada que conti<strong>en</strong>e un atributo que<br />
es de tipo tabla, es necesario darle un nombre de<br />
almac<strong>en</strong>ami<strong>en</strong>to a la NESTED TABLE mediante la<br />
cláusula STORE AS que es un nombre interno y no se<br />
puede utilizar para acceder directam<strong>en</strong>te a la tabla<br />
anidada.<br />
• La tabla anidada es un tipo colección y funciona como<br />
tal. Por tanto, el acceso a sus miembros (bi<strong>en</strong> para<br />
inserción, borrado o consulta) es necesario hacerlo a<br />
través de la tabla principal.<br />
SELECT P.proyecto_ID, Pl.refplano.Plano_ID,<br />
Pl.refplano.num_figuras<br />
FROM Proyecto P, TABLE(P.ti<strong>en</strong>e_plano) Pl<br />
WHERE P.Nombre='MIDAS';<br />
26