oracle视图

视图:(百度百科的定义)视图是一个虚拟表,视图并不在数据库中存储数据值,数据库中只在数据字典中存储对视图的定义。

视图的优点:

1.为用户集中数据,简化用户的数据查询和处理。
2.屏蔽数据库的复杂性,用户不必了解数据库的复杂性。
3.简化用户权限的管理,只授予用户使用视图的权限。
4.便于数据共享,多个用户不必都定义所需的数据。
5.可以重新组织数据,以便关联到其他应用中。

库里已经有两张表westemp ,westdept b,现在我们想要创建一个视图temp_dept_view,来描述a,b表的内连接查询的结果

oracle视图创建语句:

1.复杂视图

create or replace view temp_dept_view
(wtdempid,wtdempname,wtddepte,wtddeptd,wtddeptname,wtddeptaddress)
as
select a.wtdempid,a.wtdempname,a.wtddeptid,b.wtddeptid,b.wtddeptname,b.wtddeptaddress from westemp a,westdept b where a.wtddeptid=b.wtddeptid

2.简单视图

create view westtemp
as
select a.*from westemp a

插入一条数据:

insert into westtemp values (15,'o',4)

可以

3.只读视图

create or replace view westtemp1
as
select b.* from westdept b
with read only

插入一条数据,报错

insert into westtemp1 values (5,'coder','seatle')

删除视图:

drop view  westtemp
注:删除视图不影响基表中的数据;只有视图所有者和具备DROP VIEW权限的用户可以删除视图;
     视图被删除后,基于被删除视图的其他视图或应用将无效。
 
复杂视图与简单视图:
  视图分为复杂视图和简单视图。它们的区分点:是否是单表,是否包含函数和数据组。
  简单视图只从单表里获取数据;复杂视图从多表里获取数据。
  简单视图不包含函数和数据组;复杂视图包含函数和数据组。
  简单视图可以实现DML操作;复杂视图不可以
复杂视图:
create or replace view westtemp2
(address,sumempid,avgempid,maxempid,minempid)
as
select b.wtddeptaddress,sum(a.wtdempid),avg(a.wtdempid),max(a.wtdempid),min(a.wtdempid) from westemp a,westdept b where a.wtddeptid=b.wtddeptid group by b.wtddeptaddress

插入一条数据,报错

insert into westtemp2 values('losangles',23,5.3,14,6)

视图的状态 

当创建视图后,ORACLE将会验证视图的有效性,如修改了基本表,则会导致视图的无效状态.可查询数据字典user_objects的status.
  1)、创建表T,包含ID和NAME两列;
  2)、使用该表创建一个视图t_view,查看该表所有信息;
  3)、使用该表创建一个视图t_view2,查看该表的ID和NAME列
  4)、查看该视图状态;
  5)、在表T上增加一列性别sex,重新查看视图t_view的状态.
  6)、在表T上删除列NAME,重新查看视图t_view2的状态.
  注:VALID表示正常状态,invalid表示非正常状态

使视图状态变为有效的方法 

1)在ORACLE中对该视图进行一次查询,如果没有错误,则系统会自动对其进行重新编译,视图状态变为有效。
2)手动重新编译视图
  语句格式:
  alter view view_name compile;
 

后期需要补充

附件:

后期会补充建表语句。

现有两张表,

westemp员工表,有(wtdempid,wtdempname,wtddeptid)列,

westdept部门表,有 (wtddeptid,wtddeptname,wtddeptaddress)列.

其中westemp.wtddeptid可以等于 westdept.wtddeptid.

原文地址:https://www.cnblogs.com/westward/p/5177689.html