oracle中sequence序列的使用

来源:互联网 发布:dede数据库配置文件 编辑:程序博客网 时间:2024/05/19 04:04

序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主键值。

1建立序列命令

CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
[
NOCYCLE]  --
INCREMENT BY
指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1
START WITH
:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE
:指定序列可生成的最大值。
NOMAXVALUE
:为升序指定最大值为1027,为降序指定最大值为-1
MINVALUE
:指定序列的最小值。
NOMINVALUE
:为升序指定最小值为1。为降序指定最小值为-1026
NOCYCLE
一直累加,不循环

2更改序列命令

ALTERSEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE]

修改序列可以:
  
修改未来序列值的增量。
设置或撤消最小值或最大值。
改变缓冲序列的数目。
  
指定序列号是否是有序。

注意:
1,第一次NEXTVAL返回的是初始值
2
,可以alterstart至以外的所有sequence参数.如果想要改变start值,必须 drop sequence re-create .

3删除序列命令

DROP SEQUENCE [user.]sequence_name
用于从数据库中删除一序列。

4)牛刀小试

     4.1)创建一个序列号的语句:

-- Create sequence
create sequence NCME_QUESTION_SEQ
minvalue 1
maxvalue 999999999999
start with 1
increment by 1
nocache;

4.2SQL中取序列号的用法:

SELECT NCME_QUESTION_SEQ.nextval FROM dual
SELECT NCME_QUESTION_SEQ.CURRVAL FROM dual


dual本身就是一个单词,并非是某个词组的缩写.名词意为对数,形容词为双重的意思.在Oracle中dual指dual table,一个单行单列的虚拟表.
1: DUAL table-- a special kind of one-row and one-column database table;
2:dual is a table which is created by oracle along with the data dictionary. It consists of exactly one column whose name is dummy and one record. The value of that record is X.
3:Note that the outer query references the dummy table called dual the dual table is used in Oracle when you need to run SQL that does not logically have a table name.