视图:(百度百科的定义)视图是一个虚拟表,视图并不在数据库中存储数据值,数据库中只在数据字典中存储对视图的定义。
视图的优点:
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)、创建表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;
2)手动重新编译视图
语句格式:
alter view view_name compile;
后期需要补充
附件:
后期会补充建表语句。
现有两张表,
westemp员工表,有(wtdempid,wtdempname,wtddeptid)列,
westdept部门表,有 (wtddeptid,wtddeptname,wtddeptaddress)列.
其中westemp.wtddeptid可以等于 westdept.wtddeptid.