您的位置:首页 > 数据库 > Oracle

Oracle其他数据对象 –- 序列

2012-03-16 12:59 435 查看
 
Oracle其他数据对象 –- 序列
一  介绍

    序列: 可供多个用户用来产生唯一数值的数据库对象

(1)   自动提供唯一的数值

(2)   共享对象

(3)   主要用于提供主键值

(4) 将序列值装入内存可以提高访问效率

二  实战:

1.创建序列:

  1  create sequence seqEmp

  2  increment by 1

  3  start with 1

  4  maxvalue 3

  5  minvalue 1

  6  cycle

  7* cache 2

SQL> /

序列已创建。

 

注:

create 创建

sequence  序列

seqEmp  序列名

increment by 1  步长,递增的序列

start with  开始的值 起始值

maxvalue  3 最大值

minvalue  1 最小值

cycle 循环  | nocycle  不循环

cache  缓存值 (maxvalue-minvalue)/increment by值

         比如:(10- 1)/2  =4.5,那么缓存值不能大于5

但是一般情况下不使用缓存,因为缓存会截断序列

nextvalue 取的下一个值

currval 当前值  

 

2.一般情况下创建的序列:
  1  create sequence sepDep

  2  increment by 1

  3  start with 1

  4  maxvalue 10

  5  minvalue 1

  6  nocycle

  7* nocache

SQL> /

序列已创建。

3.序列的查询

    可通过查询数据字典视图user_sequences来获取序列定义的信息,为:

        SQL> select * from user_sequences;

 

序列在创建之后要查询序列,在查询currval的时候首先要先查nextval之后,才可以查currval,要不会出错,如:

 

SQL> select sepDep.currval from dual;

select sepDep.currval from dual

                           *

第 1 行出现错误:

ORA-08002: 序列 SEPDEP.CURRVAL 尚未在此会话中定义

 

 

所以要先插nextval,如

SQL> select sepDep.nextval from dual;

   NEXTVAL

----------

         1

SQL> select sepDep.currval from dual;

   CURRVAL

----------

         1

SQL>

 

注:

(1)   nextval 返回序列中下一个有效的值,任何用户都可以引用

(2)   currval 中存放序列的当前值

(3)   nextval 应在 currval 之前指定 ,二者应同时有效

4.修改序列

    修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

SQL> alter sequence seqEmp maxvalue 5;

序列已更改。

 

SQL> alter sequence seqEmp nocycle nocache;

序列已更改。

 

SQL> alter sequence seqEmp minvalue 2;

序列已更改。

 

SQL> alter sequence seqEmp cycle;

序列已更改。

 

注:

(1)必须是序列的拥有者或对序列有 ALTER 权限

(2)只有将来的序列值会被改变

(3)改变序列的初始值只能通过删除序列之后重建序列的方法实现

(4)start with只能把表删除之后修改。

5. 删除序列

(1)   使用DROP SEQUENCE 语句删除序列

(2)   删除之后,序列不能再次被引用

删除的语句:

drop sequence  sepDep(序列名)

6.序列的使用的注意事项

(1)   将序列值装入内存可提高访问效率

(2)序列在下列情况下出现裂缝:

•    回滚

•    系统异常

•    多个表同时使用同一序列

(2)   如果不将序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值

7.创建一个表,来指定序列

(1)  创建表

SQL> create table seqEmps(

  2  id number(10),

  3  name varchar2(30)

  4  );

表已创建。

 

(2)创建序列

SQL> create sequence seqCre

  2  increment by 1

  3  start with 1

  4  maxvalue 10

  5  minvalue 1

  6  nocycle

  7  nocache

  8  ;

序列已创建。

(3)向表中添加序列

    SQL> insert into setEmps values(seqCre.nextval,'老王');

    多执行几遍之后的效果为:

    SQL> select * from seqEmps;

        ID NAME

---------- ------------------------------

         1 老王

         2 老王

         3 老王

         4 老王

         5 老王

         6 老王

         7 老王

已选择7行。

 

如果是多行的话,直接在values中添加即可,比如:

SQL> insert into seqEmps1 values(seqCre1.nextval,'老王','女');

效果为:

SQL> select * from seqEmps1;

        ID NAME                           SEX

---------- ------------------------------ ----------

         1 老王                           女

         2 老王                           女

         3 老王                           女

         4 老王                           女

         5 老王                           女

         6 老王                           女

已选择6行。

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息