Oracle中视图的使用

    xiaoxiao2021-12-14  16

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

    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=20 with 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=20 with 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;--查看视图的创建语句

    转载请注明原文地址: https://ju.6miu.com/read-965282.html

    最新回复(0)