索引语法
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
CYCLE | NOCYCLE 指定在达到最大值或最小值之后,序列是否继续生成值
(NOCYCLE 是默认选项)
CACHE n | NOCACHE 指定Oracle Server 预先分配并保留在内存中的值的数量
(默认情况下,Oracle Server 会高速缓存20 个值)
NEXTVAL 和CURRVAL 伪列
• NEXTVAL 会返回下一个可用的序列值。每次被引用时
NEXTVAL 都会返回一个唯一值,即使对于不同用户也
是如此。
• CURRVAL 会获得当前序列值。
• 只有对序列发出NEXTVAL 之后,CURRVAL 才能包含值
使用NEXTVAL 和CURRVAL 的规则
可以在下列上下文中使用NEXTVAL 和CURRVAL:
• 不是子查询一部分的SELECT 语句的SELECT 列表
• INSERT 语句中子查询的SELECT 列表
• INSERT 语句的VALUES 子句
• UPDATE 语句的SET 子句
不能在下列上下文中使用NEXTVAL 和CURRVAL:
• 视图的SELECT 列表
• 带有DISTINCT 关键字的SELECT 语句
• 带有GROUP BY、HAVING 或ORDER BY 子句的SELECT 语句
• SELECT、DELETE 或UPDATE 语句中的子查询
• CREATE TABLE 或ALTER TABLE 语句中的DEFAULT 表达式
使用序列
INSERT INTO departments(department_id,
department_name, location_id)
VALUES (dept_deptid_seq.NEXTVAL,
'Support', 2500);
获取当前序列
SELECT dept_deptid_seq.CURRVAL
FROM dual;
修改序列
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
删除序列
DROP SEQUENCE dept_deptid_seq;