码迷,mamicode.com
首页 > 数据库 > 详细

oracle(8)视图和查询数据库对象方法

时间:2017-12-28 23:32:43      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:子集   sel   不包含   arc   分组   dep   就是   对象   class   

视图 view

视图是数据库的对象之一。 视图也叫做虚表,既虚拟表,本质是对应一条select 语句,

select语句的结果集赋予一个名字就是视图的名字。

作用: 

  1.可以简化复杂的查询

  2.可以限制数据的访问,对基表的其他数据起到安全和保密的作用。

创建一个 表        create table emp(

empno number(6), name char(10), id number(4), deptno number(10), job varchar2(10) );

 

*创建视图:
create
view emp_v as select * from emp where id 1 between 10;

创建视图时,create对应的表叫做基表。
* 查询视图
  select *from emp_v ;
  根据查询所的方式可分为三种视图:
  1.简单视图:根据单表建立的,且不包含任何函数运算,表达式和分组,既单表的子集。
  2.复杂视图:根据单表建立,包含有单行函数/表达式/分组的视图。
  3.连接视图:基于多表建立的视图。
*删除视图
  drop view emp_v;

*简单视图可以进行DML操作,但是复杂视图不允许DML操作。

修改视图:视图的结构取决于对应的子查询,所以修改视图即替换对应
的子查询。REPLACE
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE;
SELECT * FROM V_EMP_J;

对视图的不当DML操作会污染基表数据:
对简单视图进行DML操作后,视图对基表做对应的操作,但是影响的数据对应视图来说
是不可见的,就是对基表数据的污染。

为了避免视图对基表产生数据的污染。我们可以对视图添加检查选项要求(检查约束)
使其对视图进行DML时操作时检查视图时操作后是否对操作的数据可见,如果不可见
则不允许操作。

*简单视图可以进行DML操作,但是复杂视图不允许DML操作。
视图本身是不包含数据的,只是基表的逻辑映射,所以
对视图执行DML操作时,实际上操作的是基表。

对视图进行DML操作,实际上是对基表进行DML操作,
如果不去约束,我们对视图不可视进行DML操作会对
基表的数据产生污染。

对视图进行DML操作基本原则:
*简单视图可以进行DML操作,但是有以下情况除外,
基表中定义了非空列,但是简单视图对应的 SELECT
语句没有包含这个非空列,导致非空列对于视图不可视,
这时无法对视图进行 INSERT 操作。
*复杂视图不允许DML操作
*DML操作不能违反基表的约束条件。

创建具有 CHECK OPTION 的约束视图。
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE
WHERE SAL<3000
WITH CHECK OPTION; --添加约束后无法对基表进行数据污染。
SELECT * FROM V_EMP_J;

创建具有 READ ONLY 约束的视图。
对简单进行DML操作是合法的但是不安全,如果没有在视图进行DML
操作的必要的话,要在建立视图时声明只读来避免这种情况,包含
基表数据不会被非法的修改。
无法对只读视图执行DML操作。
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE
WHERE SAL<3000
WITH READ ONLY;--用来只读

数据字典:
数据字典是一系列的表,这些表的数据由数据库自行维护,记录清单清单信息。
1.在数据字典 user_objects 中查询所有视图:
SELECT object_name FROM user_objects
where object_type=‘VIEW‘;--查找所有视图
view:视图 table:表 sequence:序列 index:索引
2.在数据字典 USER_VIEWS 查询所有的指定视图:

3.在数据字典 user_updatable_columns 中查询视图:
SELECT COLUMN_NAME,INSERTABLE,UPDATABLE,DELETABLE --看操作权限
FROM USER_UPDATABLE_COLUMNS
WHERE TABLE_NAME=‘V_EMP_J‘;




 

oracle(8)视图和查询数据库对象方法

标签:子集   sel   不包含   arc   分组   dep   就是   对象   class   

原文地址:https://www.cnblogs.com/zhangzonghua/p/oracle_view_query.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!