Modelo objeto-relacional en Oracle ÍNDICE
Modelo objeto-relacional en Oracle ÍNDICE Modelo objeto-relacional en Oracle ÍNDICE
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
- Page 1 and 2: Modelo objeto-relacional en Oracle
- Page 3 and 4: LOBS • Generalmente la informaci
- Page 5 and 6: TIPOS ANY • Oracle permite crear
- Page 7 and 8: TIPOS DEFINIDOS POR EL USUARIO •
- Page 9 and 10: SQL:2003 TIPOS DISTINTOS CREATE TYP
- Page 11 and 12: TIPOS ESTRUCTURADOS • Un ejemplo
- Page 13 and 14: ÍNDICE • LOBS • TIPOS ANY •
- Page 15 and 16: TIPOS REF • Un tipo estructurado
- Page 17 and 18: MÉTODOS • Es posible asociar com
- Page 19 and 20: ÍNDICE • LOBS • TIPOS ANY •
- Page 21 and 22: HERENCIA • La característica [NO
- Page 23 and 24: HERENCIA • Pero, además de que l
- Page 25 and 26: TIPOS COLECCIÓN • Desde una sent
- Page 27 and 28: TIPOS COLECCIÓN • Las principale
- Page 29: EVOLUCIÓN DE TIPOS • Pero, ¿qu
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