zoukankan      html  css  js  c++  java
  • ORACLE序列的使用总结

    1.创建序列
    ORACLE序列的语法格式为:

    CREATE SEQUENCE 序列名
    [INCREMENT BY n]
    [START WITH n]
    [{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
    [{CYCLE|NOCYCLE}]
    [{CACHE n|NOCACHE}];

    1)INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。

    2)START WITH 定义序列的初始值(即产生的第一个值),默认为1。

    3)MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。

    4)MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。

    5)CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;最小值默认为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。

    ORACLE OCP考试有道题关于序列,如下所示
    Evaluate the following CREATE SEQUENCE statement:
    CREATE SEQUENCE seq1
    START WITH 100
    INCREMENT BY 10
    MAXVALUE 200
    CYCLE
    NOCACHE;
    The sequence SEQ1 has generated numbers up to the maximum limit of 200. You issue the following
    SQL statement:
    SELECT seq1.nextval FROM dual;
    What is displayed by the SELECT statement?
    A. 1
    B. 10
    C. 100
    D. an error

    答案:A
    如果想从指定的start with 值100开始循环,则必须指定minvalue值为100,否则从默认的最小值1开始循环。

    alter sequence seq1 minvalue 100;

    6)CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。 缓存选项会造成数据丢失,当实例异常关闭时。

    2.删除序列

    语法是DROP SEQUENCE [schema].序列名;

    CREATE SEQUENCE SEQ_TEST
    INCREMENT BY 1
    START WITH 1
    MINVALUE 1 NOMAXVALUE
    NOCYCLE;

    DROP SEQUENCE SEQ_TEST;


    3:序列使用

    CURRVAL: 返回序列的当前值。
    NEXTVAL: 序列递增,返回下一值。

    你不能使用序列的CURRVAL和NEXTVAL,在下面情况下(具体参见官方文档):
    1:在DELETE、SELECT、UPDATE的子查询中
    2:在视图或物化事物的查询中。
    3:SELECT查询中使用了DISTINCT操作符。
    4:SELECT查询中有GROUP BY或ORDER BY

    4:序列查看

    SELECT * FROM USER_SEQUENCES;

    SELECT * FROM ALL_SEQUENCES;

    SELECT * FROM DBA_SEQUENCES;

    5:序列修改

    不能修改序列的初始值,否则会报ORA-02283:

    SQL> ALTER SEQUENCE SEQ_TEST START WITH 2;

    ALTER SEQUENCE SEQ_TEST START WITH 2

    ORA-02283: 无法更改启动序列号


    SQL> ALTER SEQUENCE SEQ_TEST INCREMENT BY 2;

    Sequence altered

    转自http://www.cnblogs.com/kerrycode/archive/2013/03/18/2965747.html

  • 相关阅读:
    java编译错误No enclosing instance of type TestFrame is accessible. Must qualify the allocation with an enclosing instance of type TestFrame (e.g. x.new A(
    java 2中创建线程方法
    动态规划基本思想
    关于eclipse编译一个工程多个main函数
    java Gui初识
    Eclipse中java项目的打包
    java 播放声音
    把资源文件夹导入到eclipse中
    Java建立JProgressBar
    How to grant permissions to a custom assembly that is referenced in a report in Reporting Services
  • 原文地址:https://www.cnblogs.com/rusking/p/4592222.html
Copyright © 2011-2022 走看看