85 - Vistas (modificar datos a través de ella) |
Un club dicta cursos de distintos deportes. Almacena la información en varias tablas.
1- Elimine las tabla "inscriptos", "socios" y "cursos":
drop table inscriptos; drop table socios; drop table cursos;
2- Cree las tablas:
create table socios( documento char(8) not null, nombre varchar2(40), domicilio varchar2(30), constraint PK_socios_documento primary key (documento) ); create table cursos( numero number(2), deporte varchar2(20), dia varchar2(15), constraint CK_inscriptos_dia check (dia in('lunes','martes','miercoles','jueves','viernes','sabado')), profesor varchar2(20), constraint PK_cursos_numero primary key (numero) ); create table inscriptos( documentosocio char(8) not null, numero number(2) not null, matricula char(1), constraint PK_inscriptos_documento_numero primary key (documentosocio,numero), constraint FK_inscriptos_documento foreign key (documentosocio) references socios(documento), constraint FK_inscriptos_numero foreign key (numero) references cursos(numero) );
3- Ingrese algunos registros para todas las tablas:
insert into socios values('30000000','Fabian Fuentes','Caseros 987'); insert into socios values('31111111','Gaston Garcia','Guemes 65'); insert into socios values('32222222','Hector Huerta','Sucre 534'); insert into socios values('33333333','Ines Irala','Bulnes 345'); insert into cursos values(1,'tenis','lunes','Ana Acosta'); insert into cursos values(2,'tenis','martes','Ana Acosta'); insert into cursos values(3,'natacion','miercoles','Ana Acosta'); insert into cursos values(4,'natacion','jueves','Carlos Caseres'); insert into cursos values(5,'futbol','sabado','Pedro Perez'); insert into cursos values(6,'futbol','lunes','Pedro Perez'); insert into cursos values(7,'basquet','viernes','Pedro Perez'); insert into inscriptos values('30000000',1,'s'); insert into inscriptos values('30000000',3,'n'); insert into inscriptos values('30000000',6,null); insert into inscriptos values('31111111',1,'s'); insert into inscriptos values('31111111',4,'s'); insert into inscriptos values('32222222',1,'s'); insert into inscriptos values('32222222',7,'s');
4- Realice un join para mostrar todos los datos de todas las tablas, sin repetirlos (7 registros)
5- Elimine la vista "vista_cursos"
6- Cree la vista "vista_cursos" que muestre el número, deporte y día de todos los cursos.
7- Consulte la vista ordenada por deporte (7 registros)
8- Ingrese un registro mediante la vista "vista_cursos" y vea si afectó a "cursos"
9- Actualice un registro sobre la vista y vea si afectó a la tabla "cursos"
10- Elimine un registro de la vista para el cual no haya inscriptos y vea si afectó a "cursos"
11- Intente eliminar un registro de la vista para el cual haya inscriptos
12- Elimine la vista "vista_inscriptos" y créela para que muestre el documento y nombre del socio, el numero de curso, el deporte y día de los cursos en los cuales está inscripto
13- Intente ingresar un registro en la vista:
insert into vista_inscriptos values('32222222','Hector Huerta',6,'futbol','lunes');
No lo permite porque la modificación afecta a más de una tabla base.
14- Intente actualizar el documento de un socio (no lo permite)
15- Elimine un registro mediante la vista
16- Verifique que el registro se ha eliminado de "inscriptos"
Ver solucióndrop table inscriptos; drop table socios; drop table cursos; create table socios( documento char(8) not null, nombre varchar2(40), domicilio varchar2(30), constraint PK_socios_documento primary key (documento) ); create table cursos( numero number(2), deporte varchar2(20), dia varchar2(15), constraint CK_inscriptos_dia check (dia in('lunes','martes','miercoles','jueves','viernes','sabado')), profesor varchar2(20), constraint PK_cursos_numero primary key (numero) ); create table inscriptos( documentosocio char(8) not null, numero number(2) not null, matricula char(1), constraint PK_inscriptos_documento_numero primary key (documentosocio,numero), constraint FK_inscriptos_documento foreign key (documentosocio) references socios(documento), constraint FK_inscriptos_numero foreign key (numero) references cursos(numero) ); insert into socios values('30000000','Fabian Fuentes','Caseros 987'); insert into socios values('31111111','Gaston Garcia','Guemes 65'); insert into socios values('32222222','Hector Huerta','Sucre 534'); insert into socios values('33333333','Ines Irala','Bulnes 345'); insert into cursos values(1,'tenis','lunes','Ana Acosta'); insert into cursos values(2,'tenis','martes','Ana Acosta'); insert into cursos values(3,'natacion','miercoles','Ana Acosta'); insert into cursos values(4,'natacion','jueves','Carlos Caseres'); insert into cursos values(5,'futbol','sabado','Pedro Perez'); insert into cursos values(6,'futbol','lunes','Pedro Perez'); insert into cursos values(7,'basquet','viernes','Pedro Perez'); insert into inscriptos values('30000000',1,'s'); insert into inscriptos values('30000000',3,'n'); insert into inscriptos values('30000000',6,null); insert into inscriptos values('31111111',1,'s'); insert into inscriptos values('31111111',4,'s'); insert into inscriptos values('32222222',1,'s'); insert into inscriptos values('32222222',7,'s'); select documento,nombre,domicilio,c.numero,deporte,dia, profesor,matricula from socios s join inscriptos i on s.documento=documentosocio join cursos c on c.numero=i.numero; drop view vista_cursos; create view vista_cursos as select numero,deporte,dia from cursos; select *from vista_cursos order by deporte; insert into vista_cursos values(8,'futbol','martes'); select *from cursos; update vista_cursos set dia='miercoles' where numero=8; select *from cursos; delete from vista_cursos where numero=8; select *from cursos; delete from vista_cursos where numero=1; drop view vista_inscriptos; create view vista_inscriptos as select i.documentosocio,s.nombre,i.numero,c.deporte,dia from inscriptos i join socios s on s.documento=documentosocio join cursos c on c.numero=i.numero; insert into vista_inscriptos values('32222222','Hector Huerta',6,'futbol','lunes'); update vista_inscriptos set documentosocio='30000111' where documentosocio='30000000'; delete from vista_inscriptos where documentosocio='30000000' and deporte='tenis'; select *from inscriptos;