oracle11g导出视图,【Oracle11g】14_视图

1.视图相关的概念

视图以经过定制的方式显示来自一个或多个表的数据

视图可以视为“虚拟表”或“存储的查询”

创建视图所依据的表称为“基表”

2.视图的优点

提供了另外一种级别的表安全性

隐藏的数据的复杂性

简化的用户的SQL命令

隔离基表结构的改变

通过重命名列,从另一个角度提供数据

3.创建视图的语法

CREATE [OR REPLACE] [FORCE] VIEW

view_name [(alias[, alias]...)]

AS select_statement

[WITH CHECK OPTION]

[WITH READ ONLY];

force:强制创建视图,不管有没有表都强制创建,当创建了表后,强制创建后便可使用。

在with check option的选项下,可以总结为:

update,要保证数据update之后能被视图查询出来,也就是要符合where的条件

insert,保证insert的数据能被视图查询出来

delete,有无 with check option都一样

对于没有where字句的视图,使用with check option是多余的

with read only :不能进行任何更新、插入、删除等操作,只能查询。

3.1 with check option案例演示

-- 没有使用with check option选项

create table e_bak as select * from emp;

create view view3 as select * from e_bak where empno='7369';

update view3 set empno='9999' where empno='7369';

-- 查询记录

select * from e_bak; -- 查询发现empno为7369的记录已经被修改

-- 查询视图

select * from view3; -- 查询结果无数据

在上述这种情况下,视图view3也就相当于失效了,是一个没有任何意义的视图。那么在Oracle引入了with check option来进行更新限制

-- 使用with check option选项

create view view4 as select * from e_bak where empno='9999' with check option;

update view4 set empno='8888' where empno='9999';

-- 执行报错:ORA-01402: 视图 WITH CHECK OPTION where 子句违规

4.视图的修改

在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE

视图上的DML语句有如下限制:

只能修改一个底层的基表

如果修改违反了基表的约束条件,则无法更新视图

如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图

如果视图包含伪列或表达式,则将无法更新视图

4.1 键保留表可以更新,非键保留表则不可更新

案例说明

create table student_info(stu_no number primary key,stu_name varchar2(40),cls_no number);

create table class(cls_no number primary key,cls_name varchar2(40));

-- 插入数据

insert into student_info values(1,'张三',10);

insert into student_info values(2,'李四',30);

insert into student_info values(3,'王五',30);

insert into student_info values(4,'周六',20);

insert into class values(10,'统计1101');

insert into class values(20,'信计1101');

insert into class values(30,'物理1101');

insert into class values(40,'软件1101');

commit;

-- 创建视图

create view stu_cls as select

s.stu_no,

s.stu_name,

s.cls_no,

c.cls_no as class_no,

c.cls_name

from student_info s,class c where s.cls_no=c.cls_no;

-- 现在student是主键保留表,cls是非主键保留表

--更新student

update stu_cls set stu_no='11' where stu_no=1;

update stu_cls set stu_name='Jack' where stu_no=2;

update stu_cls set cls_no='40' where stu_no=3;

--更新class

update stu_cls set cls_name='交通运输1101' where cls_no='20'

-- 报错:ORA-01779: 无法修改与非键值保存表对应的列

5.删除视图

DROP VIEW view_name;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值