86 - Vistas (with read only) |
Una empresa almacena la información de sus empleados en una tabla llamada "empleados".
Eliminamos la tabla:
drop table empleados;
Creamos las tablas:
create table empleados( documento char(8), sexo char(1) constraint CK_empleados_sexo check (sexo in ('f','m')), apellido varchar2(20), nombre varchar2(20), domicilio varchar2(30), seccion varchar2(30), cantidadhijos number(2), constraint CK_empleados_hijos check (cantidadhijos>=0), estadocivil char(10) constraint CK_empleados_estadocivil check (estadocivil in ('casado','divorciado','soltero','viudo')), fechaingreso date );
Ingresamos algunos registros:
insert into empleados values('22222222','f','Lopez','Ana','Colon 123','Administracion',2,'casado','10/10/1990'); insert into empleados values('23333333','m','Lopez','Luis','Sucre 235','Administracion',0,'soltero','02/10/1990'); insert into empleados values('24444444','m','Garcia','Marcos','Sarmiento 1234','Contaduria',3,'divorciado','07/12/1998'); insert into empleados values('25555555','m','Gomez','Pablo','Bulnes 321','Contaduria',2,'casado','10/09/1998'); insert into empleados values('26666666','f','Perez','Laura','Peru 1254','Sistemas',3,'casado','05/09/2000');
Eliminamos las vistas "vista_empleados" y "vista_empleados2":
drop view vista_empleados; drop view vista_empleados2;
Creamos la vista "vista_empleados", que muestra solamente algunos campos de "empleados":
create view vista_empleados as select apellido, nombre, sexo, seccion from empleados;
Creamos la vista "vista_empleados2", igual que "vista_empleados", pero ahora colocamos "with read only" para impedir que puedan ejecutarse "insert", "update" y "delete" sobre esta vista:
create view vista_empleados2 as select apellido, nombre, sexo, seccion from empleados with read only;
Actualizamos el nombre de un empleado a través de la vista "vista_empleados":
update vista_empleados set nombre='Beatriz' where nombre='Ana';
Veamos si la modificación se realizó en la tabla:
select *from empleados;
Intentamos actualizar el nombre de un empleado a través de la vista "vista_empleados2":
update vista_empleados2 set nombre='Pedro' where nombre='Marcos';
No lo permite.
Ingresamos un registro en la tabla "empleados" a través de la vista "vista_empleados":
insert into vista_empleados values('Juarez','Juan','m','Sistemas');
Oracle acepta la inserción. Verificamos que la inserción se realizó en la tabla:
select *from empleados;
Intentamos ingresar un registro a través de la vista "vista_empleados2":
insert into vista_empleados2 values('Gimenez','Julieta','f','Sistemas');
Oracle no lo permite porque la vista fue definida con "with read only".
Eliminamos un registro en la tabla "empleados" a través de la vista "vista_empleados":
delete from vista_empleados where apellido='Juarez';
Oracle acepta la eliminación. Verificamos que la eliminación se realizó en la tabla:
select *from empleados;
Intentamos eliminar registros a través de la vista "vista_empleados2":
delete from vista_empleados2 where apellido='Lopez';
Oracle no lo permite porque la vista fue definida con "with read only".