索引语法

    1. CREATE SEQUENCE sequence
    2. [INCREMENT BY n]
    3. [START WITH n]
    4. [{MAXVALUE n | NOMAXVALUE}]
    5. [{MINVALUE n | NOMINVALUE}]
    6. [{CYCLE | NOCYCLE}]
    7. [{CACHE n | NOCACHE}];
    1. CREATE SEQUENCE dept_deptid_seq
    2. INCREMENT BY 10
    3. START WITH 120
    4. MAXVALUE 9999
    5. NOCACHE
    6. 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. INSERT INTO departments(department_id,
    2. department_name, location_id)
    3. VALUES (dept_deptid_seq.NEXTVAL,
    4. 'Support', 2500);

    获取当前序列

    1. SELECT dept_deptid_seq.CURRVAL
    2. FROM dual;

    修改序列

    1. ALTER SEQUENCE sequence
    2. [INCREMENT BY n]
    3. [{MAXVALUE n | NOMAXVALUE}]
    4. [{MINVALUE n | NOMINVALUE}]
    5. [{CYCLE | NOCYCLE}]
    6. [{CACHE n | NOCACHE}];
    1. ALTER SEQUENCE dept_deptid_seq
    2. INCREMENT BY 20
    3. MAXVALUE 999999
    4. NOCACHE
    5. NOCYCLE;

    删除序列

    1. DROP SEQUENCE dept_deptid_seq;