oracle数据库---视图

给scott用户创建视图的权限
[[email protected] ~]$ sqlplus / as sysdba
SQL> grant create view to c##scott;
然后连接scott用户创建视图
SQL> conn c##scott /oracle
SQL>create view myview as select d.deptno,d.dname,d.loc,count(e.empno) count,nvl(avg(e.sal),0) avg
2 from emp e,dept d
3 where e.deptno(+)=d.deptno
4 group by d.deptno,d.dname,d.loc;
oracle数据库---视图
且视图不能重名,若在创建一张名为myview的视图就会出现报错
需要删除之前与之重名的视图

如果视图存在则替换,如果不存在则创建
替换:
SQL> create or replace view myview as select * from emp where deptno=10;
oracle数据库---视图
重新创建:
SQL> create or replace view mypp as select * from emp where deptno=10;
oracle数据库---视图

创建视图的两个选项

选项一:WITH CHECK OPTION 表示不可以更新视图的创建条件
例如myview视图的创建条件为deptno=10;
对创建条件进行更新:
SQL> update myview set deptno=20 where empno=7782;
可见更新后该用户信息不见
oracle数据库---视图
此时emp表中部门编号原本为10的7782号员工的相关数据也发生了变化
oracle数据库---视图
滚回数据:
oracle数据库---视图
覆盖myview视图,添加条件使他不能更改创建条件:
SQL> create or replace view myview as
2 select * from emp where deptno=10 with check option;
oracle数据库---视图
再次尝试更改创建条件:
oracle数据库---视图
提示报错不能修改视图创建条件。
选项二:WITH READ ONLY
以上选项一使创建条件不能被更新,但是其他字段依然可以更新
SQL> update myview set sal=9999 where empno=7782
oracle数据库---视图
所以将其修改为只读模式,则其他字段也不能修改
SQL> create or replace view myview as
2 select * from emp where deptno=10
3 with read only;
此时再次修改时会提示该视图为只读视图,无法进行更新
oracle数据库---视图
创建一个查询语句为统计操作的视图
SQL> create or replace view myview as
2 select d.dname,d.deptno,d.loc,count(e.ename) count,avg(e.sal) avg
3 from emp e,dept d
4 where e.deptno(+)=d.deptno
5 group by d.deptno,d.dname,d.loc;
oracle数据库---视图
对其中的数据进行更新,会发现无法更新,因为此视图中的数据是根据统计得来
oracle数据库---视图
删除视图:
SQL> drop view myview;View dropped.