oracle数据库对象-视图

视图是数据库里的一个对象。视图是一个子查询,或者说就是一张表。视图里的表是虚表。
视图名称一般以vi或v$开头。

–为test_t表创建视图

create view vi_test_t as select id AAAA, no BBBB, t_name CCCC, s_name DDDD, score EEEE from test_t where score > 60;

–查询视图

select * from vi_test_t;

AAAA BBBB CCCC DDDD EEEE
2 2 Mary 李四 99
3 3 Tom 王五 76

。。。以下记录省略

–修改视图,为视图的列添加别名

create or replace view vi_test_t(序号, 学号, 教师名字, 学生名字, 分数) as select id, no, t_name, s_name, score from test_t where score > 60;

//用 OR REPLACE 选项,允许创建视图时同名的视图已经存在,这样旧版本的视图会被替换。
//这意味着视图可以在不被删除、重新创建和再次授予对象权限的情况下修改。
//这里重新定义了别名。

序号 学号 教师名字 学生名字 分数
2 2 Mary 李四 99
3 3 Tom 王五 76

。。。以下记录省略

//只有简单视图(数据仅来自一张表),才能操作DML语句(INSERT、UPDATE和DELETE)增删改。

如果视图中包含下面的部分就不能删除行:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列 ROWNUM 关键字

如果视图中包含下面的部分就不能修改数据:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列 ROWNUM 关键字
– 用表达式定义的列

如果视图中包含下面的部分就不能通过视图添加数据:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列 ROWNUM 关键字
– 用表达式定义的列
– 基表中的 NOT NULL 列不在视图中

PS:一般不用视图操作DML语句

视图的作用:
1)简化查询的结构,把子查询定义成视图,在另一个查询里用
2)限制数据访问,屏蔽部分不愿意给客户看到的字段
3)视图建多了,如果原表的表结构改了,会增加维护工作