管理Oracle视图和序列

  1. 云栖社区>
  2. 博客>
  3. 正文

管理Oracle视图和序列

余二五 2017-11-08 19:56:00 浏览511
展开阅读全文

管理Oracle视图和序列

平台:redhat linux as5 ,oracle10g

1.管理视图

1.什么是视图
视图是一个表或多个表的逻辑表示,其查询输出作为表对待,因此也被称为虚表,视图本身没有任何数据,它不占用任何表空间,在视图上的操用实际都是针对视图基表进行的.
2.建立简单视图
首先建一个基表
SQL>grant create any view to "Y"
SQL> conn y / 123
SQL> create table t(i number,v char(10),b int);
SQL> insert into t values(1,'a',10);
SQL> insert into t values(2,'b',20);
SQL> insert into t values(3,'c',30);
SQL> commit
SQL> select * from t;
       V                  B
------------ ----------
    1    a                  10
       b                  20
       c                  30
简单视图
create view t_v as select * from t;
SQL> select * from t_v;
        V                  B
------------- ----------
     1    a                  10
     2    b                  20
     3    c                  30
对视图DML操作(insert)
SQL> insert into t values(4,'d',40);
SQL> commit;
SQL> select * from t_v;
        V                  B
---- ------- ------------
     1   a                  10
     2   b                  20
     3   c                  30
       d                  40
update
SQL> update t_v set i=10 where v='a';
SQL> commit
SQL> select * from t_v;
        V                  B
----- ------- ----------
   10    a                  10
     2    b                  20
        c                  30
     4    d                  40
在基表中查询
SQL> select * from t;
        V                  B
---- -------- ----------
    10   a                  10
     2    b                  20
        c                  30
     4    d                  40
可见对视图的一切操作本质上还是对其表的操作.
3.创建定义check约束的视图
SQL> create view t_v as select * from t where i=10 with check option constraint chk_i;
View created.
SQL> select * from t_v;
       V                  B
------------- ----------
   10   a                 10
#查找约束
SQL> select constraint_name from user_constraints;
CONSTRAINT_NAME
------------------------------
CHK_I
建立check约束的作用使某个字段为特定值,上面例子中当给视图插入数据时”I”只能为10,如下
SQL> insert into t_v values(1,'e',25);
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
SQL> insert into t_v values(2,'e',25);
iERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
SQL> insert into t_v values(10,'e',20);
1 row created.
SQL> select * from t_v;
          V                  B
---- ------------ ----------
     10    a                  10
     10    e                  20
3.建立复杂视图
先查看一下基表
SQL> select * from t;
       V                  B
----- ---------------------------- ----------
   10    a                  10
        b                  20
    3     c                  30
        d                  40
   10    e                  20
   10    d                  15
创建复杂视图(字段带函数)
SQL> create view t_v1 as select max(i) maxi,sum(b) sumb from t group by i;
View created.
SQL> select * from t_v1;
     MAXI      SUMB
------------- ----------
         2         20
         4         40
         3         30
        10         45
4.修改视图
SQL> create or replace view t_v(i,v) as select i,v from t;
View created.
SQL> desc t_v;
 Name                                Null?    Type
 ----------------------------------------- -------- ----------------------------
 I                                                  NUMBER
 V                                                 CHAR(10)
SQL> select * from t_v;
 
               V
---------- ----------
    10         a
     2          b
     3          c
     4         d
    10        e
    10        d
5.重新编译
SQL> alter view t_v compile;
View altered.
6.删除视图
SQL> select view_name from user_views;
VIEW_NAME
------------------------------
T_V
T_V1
SQL>drop view t_v
SQL> select view_name from user_views;
VIEW_NAME
------------------------------
T_V1

2.管理序列

序列是一种用于生成唯一数字值的数据库对象,可以帮助DBA自动提供惟一的主键值,其实序列并不是必须有的,如果不使用序列,编写程序会生成这些数字值,通过使用序列,可以简化这种处理操作.
1.建立序列
SQL>grant create any sequence to “Y”
SQL>conn y / 123
#语法
SQL>create sequence sequence_name optin(s)
Options:
Increment by int
Maxvalue int | nomaxvalue
Minvalue int | nominvalue
Cycle | nocycle
Cacle int | nocache
Order | noorder
SQL> create sequence t_seq start with 10
  2  increment by 5
  3  nomaxvalue
  4  nocycle
  5  cache 20;
2.访问序列
Oracle为序列提供了两个伪列nextval,currval,可通过表dual访问
SQL> select t_seq.nextval from dual;
   NEXTVAL
----------------------
        10
SQL> select t_seq.nextval from dual;
   NEXTVAL
------------------------
        15
SQL> select t_seq.currval from dual;
   CURRVAL
----------------------
        15
3.使用序列
Oracle规定在使用序列前要先执行一次nextval
使用序列很简单只要直接用t_seq.currvalt_seq.nextval调用就可以了.
SQL> insert into t values(t_seq.nextval,t_seq.nextval);
1 row created.
#修改序列
SQL>alter sequence sequence_name optin(s)
Options:
Increment by int
Maxvalue int | nomaxvalue
Minvalue int | nominvalue
Cycle | nocycle
Cacle int | nocache
Order | noorder
#删除序列
SQL>drop sequence dequence_name
4.使用序列注意事项
1.cache跳号
建立序列时cache选项可以把N个序列存在cache中,然后用户到cache取序列,当oracle不正常关闭时,cache中的内容就会丢失,而再重新生成序列等待用户来取,这样就可能丢失一部分序列,出现跳号
2.Rollback缺口
在执行语名时提取出了序列,当执行rollback语名取消事务操作时,被提取了来的序列就丢了,所以有rollback缺口

3.查看视图,序列常用的数据字典

dba_view                          all_view                             user_view
dba_updatable_columns    all_updatable_columns       user_updatable_columns
dba_sequences                 all_squences                       user_sequences




本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/170352,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注