oracle视图(Oracle视图详解)
一、oracle 视图sql语句怎么写
方法和详细的操作步骤如下:
1、第一步,通过pl
/ sql登录到oracle数据库,见下图,转到下面的步骤。
2、第二步,完成上述步骤后,输入sql以查询该库的所有视图,elect* from all_views t,并要求所有者在结果中代表不同的用户,见下图,转到下面的步骤。
3、第三步,完成上述步骤后,如果查看用户的所有视图,执行sql,select* fromuser_views t,可以看到用户尚未创建视图,见下图,转到下面的步骤。
4、第四步,完成上述步骤后,如果要查看库,则执行sql,代码见下图。这样,就解决了这个问题了。
二、Oracle数据库-视图的概念
一视图概念
视图是原始数据库数据的一种变换是查看表中数据的另外一种方式可以将视图看成是一个移动的窗口通过它可以看到感兴趣的数据
视图是从一个或多个实际表中获得的这些表的数据存放在数据库中那些用于产生视图的表叫做该视图的基表一个视图也可以从另一个视图中产生
视图的定义存在数据库中与此定义相关的数据并没有再存一份于数据库中通过视图看到的数据存放在基表中
视图看上去非常象数据库的物理表对它的操作同任何其它的表一样当通过视图修改数据时实际上是在改变基表中的数据相反地基表数据的改变也会自动反映在由基表产生的视图中由于逻辑上的原因有些视图可以修改对应的基表有些则不能(仅仅能查询)
二视图的作用
*简单性看到的就是需要的视图不仅可以简化用户对数据的理解也可以简化他们的操作那些被经常使用的查询可以被定义为视图从而使得用户不必为以后的操作每次指定全部的条件
*安全性通过视图用户只能查询和修改他们所能见到的数据数据库中的其它数据则既看不见也取不到数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上但不能授权到数据库特定行和特定的列上通过视图用户可以被限制在数据的不同子集上
使用权限可被限制在基表的行的子集上
使用权限可被限制在基表的列的子集上
使用权限可被限制在基表的行和列的子集上
使用权限可被限制在多个基表的连接所限定的行上
使用权限可被限制在基表中的数据的统计汇总上
使用权限可被限制在另一视图的一个子集上或是一些视图和基表合并后的子集上
*逻辑数据独立性视图可帮助用户屏蔽真实表结构变化带来的影响
三视图的安全性
视图的安全性可以防止未授权用户查看特定的行或列是用户只能看到表中特定行的方法如下
在表中增加一个标志用户名的列
建立视图是用户只能看到标有自己用户名的行
把视图授权给其他用户
四逻辑数据独立性
视图可以使应用程序和数据库表在一定程度上独立如果没有视图应用一定是建立在表上的有了视图之后程序可以建立在视图之上从而程序与数据库表被视图分割开来视图可以在以下几个方面使程序与数据独立
如果应用建立在数据库表上当数据库表发生变化时可以在表上建立视图通过视图屏蔽表的变化从而应用程序可以不动
如果应用建立在数据库表上当应用发生变化时可以在表上建立视图通过视图屏蔽应用的变化从而使数据库表不动
如果应用建立在视图上当数据库表发生变化时可以在表上修改视图通过视图屏蔽表的变化从而应用程序可以不动
lishixinzhi/Article/program/Oracle/201311/16872三、Oracle中如何建视图
Oracle中创建视图
Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。
视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。
视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。
视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2.用户通过简单的查询可以从复杂查询中得到结果。
3.维护数据的独立性,试图可从多个表检索数据。
4.对于相同的数据可产生不同的视图。
视图分为简单视图和复杂视图:
简单视图只从单表里获取数据
复杂视图从多表
简单视图不包含函数和数据组
复杂视图包含
简单视图可以实现DML操作
复杂视图不可以.
视图的创建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE:不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE:只有基表都存在ORACLE才会创建该视图:
alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION:
插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY:
该视图上不能进行任何DML操作。
例如:
CREATE OR REPLACE VIEW dept_sum_vw
(name,minsal,maxsal,avgsal)
AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
视图的定义原则:
1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
2.在没有WITH CHECK OPTION和 READ ONLY的情况下,查询中不能使用
ORDER BY子句;
3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象
权限。
视图的查询:
视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。
还可以查询视图的全部信息和指定的数据行和列。
如:
检索数据:
SQL>SELECT* FROM dept_sum_vw;
查询视图定义:
SELECT view_name,text from user_views;
其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS
得到相关信息。
修改视图:
通过OR REPLACE重新创建同名视图即可。
视图上的DML操作:
DML操作应遵循的原则:
1.简单视图可以执行DML操作;
2.在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字时不能
删除数据行;
3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
a.视图中包含GROUP函数,GROUP BY子句,DISTINCT关键字;
b.使用表达式定义的列;
c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。
视图可用于保持数据库的完整性,但作用有限。
通过视图执行引用完整性约束可在数据库级执行约束。
WITH CHECK OPTION子句限定:
通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,
因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
例如:
CREATE OR REPLACE VIEW vw_emp20
AS SELECT* FROM emp
WHERE deptno=20
WITH CHECK OPTION constraint vw_emp20_ck;
视图已建立。
查询结果:
SELECT empno,ename,job FROM vw_emp20;
EMPNO ENAME JOB
------------------------------------------------
7369 SMITH CLERK
7566 JONES MANAGER
7902 FORD ANALYST
修改:
UPDATE vw_emp20
SET deptno=20
WHERE empno=7902;
将产生错误:
UPDATE vw_emp20
*
ERROR位于第一行:
ORA-01402:视图WITH CHECK OPTION违反WHERE子句
视图的删除:
DROP VIEW VIEW_NAME语句删除视图。
删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
视图被删除后,基于被删除视图的其他视图或应用将无效。