1、创建序列语法
CREATE SEQUENCE sequence
[INCREMENT BY n]            //序 列值间隔,默认为1     如果指定的为负数,序 列值将递减产生
[START WITH n]               //起始序 列值,默认为1
[{MAXVALUE n | NOMAXVALUE}]          //最大序 列值 | 最大序 列值为10的27次方,降序的最大值为-1
[{MINVALUE n | NOMINVALUE}]          //最小序 列值 | 升序最小序 列值为1,降序最小序 列值为-10的26次方
[{CYCLE | NOCYCLE}]         //序 列值在达到指定最大或最小值之后继续产生序 列值(从头再开始),NOCYCLE不再生产(默认值)
[{CACHE n | NOCACHE}];    //序 列被预先分配存储到内存,NOCACHE默认值
2、建立序
CREATE SEQUENCE dept_deptno
INCREMENT BY 20
START WITH 50
MAXVALUE 200
NOCACHE
CYCLE
/
3、伪列:NEXTVAL和CURRVAL
NEXTVAL:用于返回序 列下一个可获取的值。引用(sequence).NEXTVAL时,一个新的序 列值产生并保存到CURRVAL伪列。对于每次引用都产生下一个序 列值并返回,对于不同的用户引用也是一样。
CURRVAL:被引用前必须使用NEXTVAL产生一个序 列值,用于提取当前用户产生的序 列值。
4、查询序
查询当前序 列值
SELECT dept_deptno.CURRVAL FROM dual;
查询下一个返回的序 列值
SELECT dept_deptno.NEXTVAL FROM dual;          注意:这样也是对NEXTVAL的引用,会产生下一个序 列值
如果序 列不是保存在内存中的,可以查看数据字典,这样不会产生新的序 列值
SELECT sequence_name, min_value, max_value,
increment_by,last_number
FROM   user_sequences
/
5、使用序
未使用NEXTVAL时情况
SQL> INSERT INTO dept1(deptno,dname,loc)
2  VALUES (dept_deptno.CURRVAL,'IT_DEPT','BEIJING')
3  /
VALUES (dept_deptno.CURRVAL,'IT_DEPT','BEIJING')
*
ERROR at line 2:
ORA-08002: sequence DEPT_DEPTNO.CURRVAL is not yet defined in this session
正确的用法
INSERT INTO dept1(deptno,dname,loc)
VALUES (dept_deptno.NEXTVAL,'IT_DEPT','BEIJING')
/
1 row created.
INSERT INTO dept1(deptno,dname,loc)
VALUES (dept_deptno.NEXTVAL,'HR_DEPT','SHANGHAI')
/
1 row created.
SELECT * FROM dept1;
DEPTNO DNAME                LOC
---------- -------------------- --------------------
10 ACCOUNTING           NEW YORK
20 RESEARCH             DALLAS
30 SALES                CHICAGO
40 OPERATIONS           BOSTON
50 IT_DEPT              BEIJING
60 HR_DEPT              SHANGHAI
6 rows selected.
6、修改序
ALTER SEQUENCE dept_deptno
INCREMENT BY 10
MAXVALUE 400
NOCACHE
NOCYCLE
/
Sequence altered.
7、删除序
DROP SEQUENCE dept_deptno;
Sequence dropped.