Modelo objeto-relacional en Oracle ÍNDICE

Modelo objeto-relacional en Oracle ÍNDICE Modelo objeto-relacional en Oracle ÍNDICE

alarcos.inf.cr.uclm.es
from alarcos.inf.cr.uclm.es More from this publisher
13.08.2013 Views

EVOLUCIÓN DE TIPOS • En cualquier caso, Oracle siempre devuelve los datos de una tabla en el formato especificado por la última versión del tipo. • Así, si la tabla está aún almacenada en el formato de una versión anterior del tipo, Oracle convierte los datos antes de devolverlos, aunque el formato en que están almacenados no cambia hasta que los datos sean reescritos. • En el ejemplo siguiente se cambia el tipo tipoPersona, añadiéndole un atributo y eliminando otro. • La palabra clave CASCADE propaga el cambio a los tipos y tablas dependientes, mientras que la cláusula NOT INCLUDING TABLE DATA pospone la conversión de los datos de esas tablas dependientes hasta que se reescriban. EVOLUCIÓN DE TIPOS CREATE TYPE tipoPersona AS OBJECT ( nombre VARCHAR(30), apellidos VARCHAR(30), edad NUMBER(3)) / CREATE TABLE Persona OF tipoPersona; INSERT INTO Persona VALUES (tipoPersona (‘Pepe’, ‘Sánchez’, 50)); En la consulta se recupera el valor de los objetos de la tabla Persona: SELECT VALUE(p) FROM Persona p; El resultado sería el siguiente: VALUE(P)(NOMBRE, APELLIDOS, EDAD) ---------------------------------------------- TIPOPERSONA (’Pepe', ’Sánchez', 50) 30

EVOLUCIÓN DE TIPOS A continuación, modificamos el tipo tipoPersona sustituyendo el atributo edad por f_nacimiento. En este punto, la redefinición del tipo tipoPersona, ha cambiado también la definición de la tabla Persona, pero los datos de la tabla no han sido modificados aún, para ajustarse a la nueva definición. ALTER TYPE tipoPersona ADD ATTRIBUTE (f_nacimiento DATE), DROP ATTRIBUTE edad CASCADE NOT INCLUDING TABLE DATA; Cuando consultamos ahora el valor de los objetos de la tabla Persona obtenemos lo siguiente: SELECT value(p) FROM TablaPersona p; VALUE(P)(NOMBRE, APELLIDOS, F_NACIMIENTO) ---------------------------------------------- TIPOPERSONA(’Pepe', ’Sánchez', NULL) EVOLUCIÓN DE TIPOS • Cuando la consulta anterior recupera los datos de la tabla Persona, Oracle los modifica para que concuerden con la nueva definición del tipo. • En este caso, como se ha añadido un nuevo atributo, se limita a inicializarlo con valor nulo, NULL. • Para borrar tipos con tablas u otros tipos dependientes, es necesario borrar antes todos los objetos dependientes o bien incluir la cláusula FORCE. • Así, por ejemplo, para borrar el tipo tipoPersona, tendríamos que especificar: DROP TYPE tipoPersona FORCE; 31

EVOLUCIÓN DE TIPOS<br />

• En cualquier caso, <strong>Oracle</strong> siempre devuelve los datos de<br />

una tabla <strong>en</strong> el formato especificado por la última<br />

versión del tipo.<br />

• Así, si la tabla está aún almac<strong>en</strong>ada <strong>en</strong> el formato de<br />

una versión anterior del tipo, <strong>Oracle</strong> convierte los datos<br />

antes de devolverlos, aunque el formato <strong>en</strong> que están<br />

almac<strong>en</strong>ados no cambia hasta que los datos sean<br />

reescritos.<br />

• En el ejemplo sigui<strong>en</strong>te se cambia el tipo tipoPersona,<br />

añadiéndole un atributo y eliminando otro.<br />

• La palabra clave CASCADE propaga el cambio a los<br />

tipos y tablas dep<strong>en</strong>di<strong>en</strong>tes, mi<strong>en</strong>tras que la cláusula<br />

NOT INCLUDING TABLE DATA pospone la conversión<br />

de los datos de esas tablas dep<strong>en</strong>di<strong>en</strong>tes hasta que se<br />

reescriban.<br />

EVOLUCIÓN DE TIPOS<br />

CREATE TYPE tipoPersona AS OBJECT<br />

( nombre VARCHAR(30),<br />

apellidos VARCHAR(30),<br />

edad NUMBER(3))<br />

/<br />

CREATE TABLE Persona OF tipoPersona;<br />

INSERT INTO Persona<br />

VALUES (tipoPersona (‘Pepe’, ‘Sánchez’, 50));<br />

En la consulta se recupera el valor de los <strong>objeto</strong>s de la tabla Persona:<br />

SELECT VALUE(p) FROM Persona p;<br />

El resultado sería el sigui<strong>en</strong>te:<br />

VALUE(P)(NOMBRE, APELLIDOS, EDAD)<br />

----------------------------------------------<br />

TIPOPERSONA (’Pepe', ’Sánchez', 50)<br />

30

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

Saved successfully!

Ooh no, something went wrong!