这篇文章主要介绍了Oracle中数据库对象视图怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

- 常见的数据库对象:

对象描述表基本的数据存储集合,由行和列组成视图从表中抽取的逻辑上相关的数据集合序列提供有规律的数值索引提高查询的效率同义词给对象起的别名1、Oracle的视图介绍和创建a、什么是视图?

视图是一个虚拟的表,视图建立在已有表的基本上,视图赖以建立的这些表称之为基表。

向视图提供数据内容的语句称之为SELECT语句。

b、为什么要使用视图?

主要出于两个原因:

1、安全原因,限制数据访问;2、视图可使复杂的查询易于理解和使用。

c、视图的分类

视图分为简单视图、复杂视图、连接视图、只读视图:
1、简单视图只从单表里获取数据;不包含函数和数据组。
2、复杂视图从多表获取数据;包含函数和数据组。
3、连接视图是指基于多个表建立的视图,使用连接视图能够简化连接查询。
4、只读视图只允许使用select语句,不允许其他DML语句的操作。

附加说明:DML(data manipulation language):它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。

d、如何创建视图?

创建视图的语法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];

需要注意的是,Oracle数据库用户必须具有CREATRE VIEW权限才能够创建视图。

简单视图的创建示例:

建立用于查询员工号、姓名、工资的视图。

SQL>connsys/02000059assysdba;已连接。SQL>grantcreateviewtoscott;授权成功。SQL>connscott/02000059已连接。SQL>createVIEWemp_viewASselectempno,ename,salFROMemp;视图已创建。

视图是一张虚拟的表,和表一样,可以通过SELECT语句进行查询。

SQL>select*fromemp_view;EMPNOENAMESAL7951EASON30007369G_EASON8007499ALLEN1600......7900JAMES9507902FORD30007934MILLER1300已选择15行。

在创建视图时可以修改列的名称。

SQL>createVIEWemp_view2(员工号,员工名,工资)ASselectempno,ename,salFROMemp;视图已创建。SQL>select*fromemp_view2;员工号员工名工资7951EASON30007369G_EASON8007499ALLEN16007521WARD1250......7876ADAMS11007900JAMES9507902FORD30007934MILLER1300已选择15行。


创建连接视图示例:

建立用于获取部门号为10的部门号、部门名称以及员工信息。

SQL>CREATEVIEWdept_emp_viewASSELECTd.deptno,d.dname,e.empno,e.ename,e.jobFROMdeptd,empeWHEREd.deptno=e.deptnoANDd.deptno=10;视图已创建。SQL>select*fromdept_emp_view;DEPTNODNAMEEMPNOENAMEJOB10ACCOUNTING7782CLARKMANAGER10ACCOUNTING7839KINGPRESIDENT10ACCOUNTING7934MILLERCLERK


只读视图示例:建立查看10号部门员工信息的视图。

SQL>CREATEVIEWemp_view3ASselect*fromempwheredeptno=10withreadonly;视图已创建。SQL>updateemp_view3setsal=sal+50;updateemp_view3setsal=sal+50第1行出现错误:ORA-42399:无法对只读视图执行DML操作2、Oracle视图的查询修改与删除a、视图上的DML操作

查询视图-select,如:select * from emp_view;

添加数据-insert,如:insert into empnew_view(empno, ename, sal) values(8888, 'LAYNA', 6666);

修改数据-update,如:update emp_view set sal = sal + 100 where empno = 8888;

删除数据-delete,如:delete from emp_view where empno = 8888;

注意:针对视图的更新操作(insert、update、delete)实际上改变的是基表中的数据。

b、在创建视图时定义check约束

WITH CHECK OPTION选项用于在视图上定义CHECK约束

示例:CHREATE VIEW emp_view4 AS SELECT * FROM emp_view WHERE deptno = 20 WITH CHECK OPTION chk_view;

SQL>createviewdept_emp_view2asselect*fromdept_emp_viewwheredeptno=10withcheckoptionconstraintck_view;视图已创建。SQL>select*fromdept_emp_view2;DEPTNODNAMEEMPNOENAMEJOB10ACCOUNTING7782CLARKMANAGER10ACCOUNTING7839KINGPRESIDENT10ACCOUNTING7934MILLERCLERKSQL>updatedept_emp_viewsetdeptno=20whereempno=7782;updatedept_emp_viewsetdeptno=20whereempno=7782第1行出现错误:ORA-01779:无法修改与非键值保存表对应的列

check约束的作用是在添加或者修改数据时数据必须满足with check option前的where子句的条件。如上例:修改和添加数据时deptno 的值必须为10。

c、修改视图

使用CREATE OR REPLACE VIEW 子句修改视图。

示例:CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';

SQL>CREATEORREPLACEVIEWemp_viewASSELECT*FROMempWHEREjob='SALESMAN';视图已创建。d、删除视图

当视图不再需要时,用户可以执行DROP view语句删除视图。(不会删除基表)

SQL>DROPVIEWemp_view;视图已删除。SQL>select*fromemp_view;select*fromemp_view第1行出现错误:ORA-00942:表或视图不存在3、Oracle的复杂视图a、什么是复杂视图?

复杂视图是指包含函数、表达式或者分组数据的视图,它主要用于执行查询操作。

注意:当定义复杂视图时,必须要为函数或者表达式定义列的别名。

b、创建复杂视图

示例:创建用于获得每个岗位平均工资、工资总和、最高工资和最低工资的视图。

SQL>createVIEWjob_view(job,avgsal,sumsal,maxsal,minsal)ASSELECTjob,avg(sal),sum(sal),max(sal),min(sal)FROMempGROUPBYjob;视图已创建。SQL>select*fromjob_view;JOBAVGSALSUMSALMAXSALMINSALCLERK1037.541501300800SALESMAN1400560016001250PRESIDENT5000500050005000MANAGER2758.33333827529752450ANALYST3000900030003000c、复杂视图上执行DML操作的原则

DELETE操作原则,视图中包含以下元素之一不能执行delete操作:

group by子句、分组函数、distinct关键字、rownum伪列。

UPDATE操作原则,视图中包含以下元素之一不能执行update操作:

group by子句、分组函数、dinstinct关键字、rownum伪列、使用表达式定义的列。

INSERT操作原则,视图中包含以下元素之一不能执行insert操作:

group by子句、分组函数、dinstinct关键字、rownum伪列、使用表达式定义的列、视图上没有包含基表的NOT NULL列。

感谢你能够认真阅读完这篇文章,希望小编分享的“Oracle中数据库对象视图怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!