13.08.2013 Views

Modelo objeto-relacional en Oracle ÍNDICE

Modelo objeto-relacional en Oracle ÍNDICE

Modelo objeto-relacional en Oracle ÍNDICE

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!