Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
Oracle视图管理
 
    很久没有继续学习DBA的内容了,因为这中间实在是忙得焦头烂额啊。最近虽然还是很忙,但是想是想把这一块尽早结束掉。所以打算先把别的放一放,抓紧时间学习一下这部分内容。今天的内容比较简单,是关于View的管理,这是最常用的操作,记录一下,仅为完整性。
 
 
一、视图的创建规则
 
    这里需要注意的一点就是:初始创建用户如果只是赋予了resource权限的话,那只能默认可以创建table、function、procedure、package等等,但是不包括创建view的权限,如果需要创建view权限,需要专门赋权“CREATE VIEW”或者“CREATE ANY VIEW”权限。
 
    另外需要说明的一点是:视图的操作权限取决于创建视图的user对视图中涉及的table的操作权限大小。例如用户A创建的关于TABLE_A的视图VIEW_A,而A对于TABLE_A有select、insert的权限,则如果将这个VIEW_A的select、insert权限赋予用户B,那么用户B也将可以对VIEW_A进行select和insert,而无须拥有与TABLE_A操作的权限。同样,即便B拥有了对VIEW_A所有的操作权限,也不能对VIEW_A进行update等操作。
 
1、创建一个简单的view
 
create view sales_staff as
select empno, ename, deptno
  from emp
where deptno = 10
with check option constraint sales_staff_cnst; --此句用于创建带有约束的view
 
注意一点:既然是对deptno=10的视图,不能对任何view无法查询到的记录进行修改。
例如insert into sales_staff values(7654, 'AAA', 30); 是会报错的。
 
2、Oracle后台的*展开
 
    Oracle在创建view时,会将顶层视图查询中的所有通配符(*)展开成列,形成的查询被存储在数据字典中。而且会存储相应字段名的完整大些名称,如下例所示:
 
create view dept as select * from scott.dept;
-->
create "DEPTNO", "DNAME", "LOC" FROM scott.dept;
 
3、带错误创建view
 
    如果要先创建view,后创建table(这种情况还是有实际意义的),那么就需要是哟个“带错误创建视图”的功能。这样,当创建视图时,涉及到不存在的表或现存表中的无效的列,或者当视图的拥有者不具备所需的权限时,还是能创建视图并输入到数据字典。当然这种视图是不能使用的。
 
    创建的语法是:
 
    CREATE FORCE VIEW AS ...
 
 
二、视图数据的更改
 
    关于视图是否可更改,影响的条件有很多,具体的可以参看我以前的文章《关于Views的Updatable问题》,里面有详细的论述。但是Oracle是很人性化的软件,所以我们不需要记那么复杂的东西,我们要查看某个View时候可以更新,只需要查询USER_UPDATABLE_COLUMNS这个数据字典就可以搞定了。
 
    举个简单的例子:
 
SQL> create table test_a (a int,b int);
 
Table created.

SQL> create view test_view as select a,sum(b) b from test_a group by a;
 
View created.
SQL> select * from user_updatable_columns where lower(table_name)='test_view';
 
OWNER        TABLE_NAME   COLUMN UPDATA INSERT DELETA
------------ ------------ ------ ------ ------ ------
WANGXIAOQI   TEST_VIEW    B      NO     NO     NO
WANGXIAOQI   TEST_VIEW    A      NO     NO     NO
    可见,包含有汇总函数的view是无法做任何的更改的。
 
 
三、视图的其他操作
 
    视图的其他操作也的都比较简单,所以都放在一起了解一下
 
1、更改视图
 
    alter view语句只有一个功能,就是用来重新编译视图,即:
    alter view view_name compile;
 
2、删除视图
 
    啥也不说了
    drop view view_name;
 
3、替换视图
 
    因为view不涉及任何的实际数据存储,所以可以直接drop后重建。当然最合适的做法是 使用create or replace view来替换原有的view。
 
    需要注意的有:
    ● 替换之后也更新了数据字典中的视图定义
    ● 所有依赖于此view的PLSQL、View会全部失效
 
 
四、关于视图的查看
 
    DBA|ALL|USER_VIEWS:查看所有视图的定义
    DBA|ALL|USER_UPDATABLE_COLUMNS:查看所有字段是否可更新
   
    如果需要查看VIEW创建时的代码,两种方法:
 
    1、select text from user_views where view_name = 'VIEW_NAME';
 
    2、select dbms_metadata.get_ddl('VIEW','VIEW_NAME') from dual;
 
 
 
 
 
 
 
posted on 2009-07-17 21:15 decode360 阅读(822) 评论(0)  编辑  收藏 所属分类: 08.DBA

只有注册用户登录后才能发表评论。


网站导航: