Oracle中视图的使用

来源:互联网 发布:上海交大网络医学院 编辑:程序博客网 时间:2024/05/20 05:27

视图:是一个封装了各种复杂查询的语句,简称为视图。

1.创建视图

create view 视图名(字段) as 子查询
建立一个只包含20部门雇员的信息的视图(雇员的编号,姓名,工资)

create view empv20(empno,ename,sal) as select empno,ename,sal from emp where deptno=20;
例如:
将之前的一个复杂语句包装成视图。
显示部门内最低工资比20部门最低工资要高的部门的编号及部门内最低工资:
select deptno,min(sal) from emp group by deptno having min(sal) > (select min(sal) from emp where deptno=20);
此时就可以将上面的复杂查询语句建立一张视图,之后查询视图即可。
2.高级视图
如果要创建一个同名的视图,则必须先将之前的视图删除掉,再进行创建:
drop view empv20;
有些时候如果先删除再创建则比较麻烦,所以有时最好的方式是,如果视图存在则先自动删除,
接着自动创建。
create or replace view empv20(deptno,msal) as (select deptno,min(sal) from emp group by deptno having min(sal)>(select min(sal) from emp where deptno=20 ));
例如:还是创建一个只包含20部门的视图
create view empv20(empno,ename,sal,deptno) as select empno,ename,sal,deptno from emp where deptno=20;
现在直接更改视图中的数据
将员工号为1002的部门编号改为30,此操作可以在视图中完成
update empv20 set deptno=30 where empno=1002;
此时,提示更新完成。

在建立视图的时候有两个参数:
with check option 保护视图的创建规制
create view empv20(empno,ename,sal,deptno) as select empno,ename,sal,deptno from emp where deptno=20with check option constraint empv20_ck;

执行更新操作:

update empv20 set deptno=30 where empno=1002;--更新失败,--因为当前视图是根据deptno建立的,所以不能修改deptno。update empv20 set ename='harry' where empno=1002;--更新成功--更新的是ename,成功
with read only (只读,该视图上不能进行任何DML操作),视图最好不要轻易的修改
create view empv20(empno,ename,sal,deptno) as select empno,ename,sal,deptno from emp where deptno=20with read only;
现在的字段是只读的,任意的字段都不能修改。
如果视图的基表中是多行查询(比如:group by,distinct)那么该视图也是只读的

视图上的DML 操作:
DML操作应遵循的原则:

1.简单视图可以执行DML操作;
2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能
删除数据行;
3.在视图出现下列情况时不可以通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
b.使用表达式定义的列;
c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。

视图可用于保持数据库的完整性,但作用有限。
3.查询视图
select text from user_views;--查看视图的创建语句

0 0
原创粉丝点击