View

View

Oracle中视图的种类

  • 关系视图(经过存储的查询,虚拟表)
  • 内嵌视图(inline view)(临时的,只存在于父查询的运行期间,可以让开发人员有能力在整个查询的任何部分中使用视图结果)
--得到每个单位具有最高工资的员工信息
SELECT a.EName, a.ESal, DName, b.maxsal
FROM Employee a,
	(SELECT DID, MAX(ESal) maxsal FROM Employee GROUP BY DID) b,
	Department dept
WHERE a.DID = b.DID AND a.ESal = b.maxsal AND b.DID=dept.DID;
  • 对象视图
create type emp_obj is object(
	id number(38),
	ename varchar2(30),
	email varchar2(30)
);

create table emp of emp_obj;

CREATE VIEW emp_email OF emp_obj
WITH OBJECT OID(id)
AS
SELECT emp.id,emp.email FROM emp;
  • 物化视图(在数据库中存储的查询结果, 与在运行时确定结果的关系视图不同,物化视图的结果会预先计算并且存储。由于要存储结果,所以物化视图要占用空间,但是不会延缓用户对视图的使用)
create materialized view vw_material
as
select empno,count(*) total_emp
from emp
group by empno;

--创建视图
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW
[USER.] view_name
[column1[, column2]]
AS query
[WITH CHECK OPTION [CONSTRAINT constraint_name]
[WITH READ ONLY];
--WITH CHECK OPTION选项
--使用此选项后,通过视图进行的修改,必须也能通过该视图看到修改后的结果
--即只能改变视图中的数据
--常见的错误在于在定义视图的子查询语句中使用了选择条件,而在插入时忽视了此选择条件

--删除视图
DROP VIEW view_name;
--删除视图后再次使用,系统会报出对象不存在的错误
--视图被删除之后,与该视图有关的权限也随之删除
--重新创建同名称的视图,视图的权限也需要重新赋予

--检索视图的定义
SELECT * FROM user_views WHERE view_name=‘MY_VIEW’;

--对视图的验证
--当创建视图时,Oracle将会验证视图的有效性,改变基本表的特性有可能导致视图无效
--改变列的名称,或从基本表或视图中完全删除列。
--删除构建视图的基本表或视图。
--改变基本表或视图,使其无效,这样将导致视图变得无效。
--为了解决上述问题,可以使用alter view view_name compile命令重新编译视图
--或者使用create or replace view命令重新创建视图
--或者修正视图所基于的基本表或视图

--通过视图的数据更新及删除
--如果视图包含了下面的内容,那么不能通过视图删除
--基本表中的数据:
--分组函数,例如sum、avg、min、max等;
--group by子句;
--distinct关键字;
--包含了表达式;
--rownum伪列。
--在插入数据时,除了需要满足上面提到的条件之外,还需要保证那些没有包含在视图定义中的基表的列必须允许空值。
--如果在视图定义中包含了with check option子句,那么对视图的修改除了前面的那些原则之外,还必须满足指定的约束条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值