89 - Vistas (otras consideraciones)


Problema:

Una empresa almacena la información de sus empleados en una tabla llamada "empleados".

Eliminamos la tabla:

 drop table empleados;

Eliminamos la vista "vista_empleados":

 drop view vista_empleados;

Creamos la vista "vista_empleados" que muestre algunos campos de "empleados", pero la tabla "empleados" no existe, por ello, debemos agregar, al crear la vista "force":

 create force view vista_empleados
 as
  select documento,nombre,seccion
  from empleados;

Creamos la tabla:

 create table empleados(
  documento char(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  seccion varchar2(30)
);

Ingresamos algunos registros:

 insert into empleados values('22222222','Lopez Ana','Colon 123','Sistemas');
 insert into empleados values('23333333','Lopez Luis','Sucre 235','Sistemas');
 insert into empleados values('24444444','Garcia Marcos','Sarmiento 1234','Contaduria');
 insert into empleados values('25555555','Gomez Pablo','Bulnes 321','Contaduria');
 insert into empleados values('26666666','Perez Laura','Peru 1254','Secretaria');

Consultamos la vista:

 select *from vista_empleados;

Veamos el texto de la vista consultando "user_views":

 select view_name,text from user_views where view_name='VISTA_EMPLEADOS';

Creamos o reemplazamos (si existe) la vista "vista_empleados" que muestre todos los campos de la tabla "empleados":

 create or replace view vista_empleados
 as
  select *from empleados;

Consultamos la vista:

 select *from vista_empleados;

Agregamos un campo a la tabla "empleados":

 alter table empleados
 add sueldo number(6,2);

Consultamos la vista "vista_empleados":

 select *from vista_empleados;

Note que el nuevo campo agregado a "empleados" no aparece, a pesar que la vista indica que muestre todos los campos de dicha tabla; esto sucede porque los campos se seleccionan al ejecutar "create view", para que aparezcan debemos volver a crear la vista:

 create or replace view vista_empleados
 as
  select *from empleados;

Consultemos la vista:

 select *from vista_empleados; 

Ahora si aparece el nuevo campo "sueldo" de "empleados";

Ingresemos el siguiente lote de comandos en el Oracle SQL Developer:

 drop table empleados;

 drop view vista_empleados;

 -- Creamos la vista "vista_empleados" que muestre algunos campos de "empleados",
 -- pero la tabla "empleados" no existe, por ello, debemos agregar, al crear
 -- la vista "force":
 create force view vista_empleados
 as
  select documento,nombre,seccion
  from empleados;

 -- Creamos la tabla:
 create table empleados(
  documento char(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  seccion varchar2(30)
 );

 insert into empleados values('22222222','Lopez Ana','Colon 123','Sistemas');
 insert into empleados values('23333333','Lopez Luis','Sucre 235','Sistemas');
 insert into empleados values('24444444','Garcia Marcos','Sarmiento 1234','Contaduria');
 insert into empleados values('25555555','Gomez Pablo','Bulnes 321','Contaduria');
 insert into empleados values('26666666','Perez Laura','Peru 1254','Secretaria');

 -- Consultamos la vista:
 select *from vista_empleados;

 -- Veamos el texto de la vista consultando "user_views":
 select view_name,text from user_views where view_name='VISTA_EMPLEADOS';

 -- Creamos o reemplazamos (si existe) la vista "vista_empleados" que muestre
 -- todos los campos de la tabla "empleados":
 create or replace view vista_empleados
 as
  select *from empleados;

 -- Consultamos la vista:
 select *from vista_empleados;

 -- Agregamos un campo a la tabla "empleados":
 alter table empleados
 add sueldo number(6,2);

 -- Consultamos la vista "vista_empleados":
 select * from vista_empleados;
 -- Note que el nuevo campo agregado a "empleados" no aparece,
 -- a pesar que la vista indica que muestre todos los campos
 -- de dicha tabla; esto sucede porque los campos se seleccionan
 -- al ejecutar "create view", para que aparezcan debemos volver
 -- a crear la vista:
 create or replace view vista_empleados
 as
  select *from empleados;

 -- Consultemos la vista:
 select * from vista_empleados; 

La ejecución de este lote de comandos SQL genera una salida similar a:

SQL Developer view


Retornar