索引语法

  1. --第一种
  2. CREATE SEQUENCE sequence
  3. [INCREMENT BY n]
  4. [START WITH n]
  5. [{MAXVALUE n | NOMAXVALUE}]
  6. [{MINVALUE n | NOMINVALUE}]
  7. [{CYCLE | NOCYCLE}]
  8. [{CACHE n | NOCACHE}];
  9. --第二种
  10. CREATE SEQUENCE dept_deptid_seq
  11. INCREMENT BY 10
  12. START WITH 120
  13. MAXVALUE 9999
  14. NOCACHE
  15. 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 表达式

序列使用

  1. --使用序列
  2. INSERT INTO departments(department_id,
  3. department_name, location_id)
  4. VALUES (dept_deptid_seq.NEXTVAL,
  5. 'Support', 2500);
  6. --获取当前序列
  7. SELECT dept_deptid_seq.CURRVAL
  8. FROM dual;
  9. --修改序列1
  10. ALTER SEQUENCE sequence
  11. [INCREMENT BY n]
  12. [{MAXVALUE n | NOMAXVALUE}]
  13. [{MINVALUE n | NOMINVALUE}]
  14. [{CYCLE | NOCYCLE}]
  15. [{CACHE n | NOCACHE}];
  16. --修改序列2
  17. ALTER SEQUENCE dept_deptid_seq
  18. INCREMENT BY 20
  19. MAXVALUE 999999
  20. NOCACHE
  21. NOCYCLE;
  22. --删除序列
  23. DROP SEQUENCE dept_deptid_seq;