`
kingsui
  • 浏览: 190143 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle-序列(SEQUENCE)

阅读更多

      在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按
序列号排序的地方。

1、 create sequence
    你首先要有create sequence或者create any sequence权限,
    create sequence emp_sequence
        INCREMENT BY 1  -- 每次加几个
        START WITH 1       -- 从1开始计数
        NOMAXVALUE       -- 不设置最大值
        NOCYCLE              -- 一直累加,不循环
        CACHE 10;             --预分配缓存大小为10

    一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
    CURRVAL=返回sequence的当前值
    NEXTVAL=增加sequence的值,然后返回sequence值
    比如:
        emp_sequence.CURRVAL
        emp_sequence.NEXTVAL

    可以使用sequence的地方:
        - 不包含子查询、snapshot、VIEW的 SELECT 语句
        - INSERT语句的子查询中
        - NSERT语句的VALUES中
        - UPDATE 的 SET中

    可以看如下例子:
    INSERT INTO emp VALUES
    (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

    SELECT empseq.currval FROM DUAL;

    但是要注意的是:
    -  第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,
       然后返回增加后的值。CURRVAL 总是返回当前sequence的值,但是在第一次NEXTVAL
       初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次sequence的值,
       所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
    -  如果指定CACHE值,oracle就可以预先在内存里面放置一些sequence,这样存取的快
       些。
       cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如
       数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可
       以在create sequence的时候用nocache防止这种情况。

2、 Alter sequence
    你或者是该sequence的owner,或者有ALTER ANY sequence权限才能改动sequence。 可
以alter除start值之外的所有sequence参数。如果想要改变start值,必须drop  sequence
再re-create。例子:
    ALTER sequence emp_sequence
        INCREMENT BY 10
        MAXVALUE 10000
        CYCLE    -- 到10000后从头开始
        NOCACHE;

    影响sequence的初始化参数:
        sequence_CACHE_ENTRIES =
        设置能同时被cache的sequence数目。  
   
    可以很简单的Drop sequence
    DROP sequence order_seq;

  用plsqldev创建:

1. 用plsql 可以用界面直接新建一个 Sequences , 不用写代码,如果想看代码的话,右下角有一个查看 SQL 的,很方便.

2. 查询
SELECT SEQ_Name.NEXTVAL FROM DUAL

相关步骤图片:
1. 可以点右键新建


2. 新建后,输入你的相关配置
循环是指cycle, 即达到最大值后,此序列又从最小值开始,根据自己需求选择
(我的这里是查看页面,所以为禁用)



3.  
查看所对应的 SQL



4.

用存储过程为多表生成序列:

为每张表生成对应的序列

--创建存储过程
create or replace procedure p_createseq(tablename in varchar2)
is
strsql varchar2(500);
begin
strsql:='create sequence seq_'||tablename||' minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache';
execute immediate strsql;
end p_createseq;
/

--创建序列
exec p_createseq('t_power');
exec p_createseq('t_roler');
exec p_createseq('t_roler_power');
exec p_createseq('t_department');
exec p_createseq('t_quarters');
exec p_createseq('t_quarters_roler');
exec p_createseq('t_emp');
exec p_createseq('t_require_plan'); 
 

  Oracle   将升序序列的最大值设置为:10的27次方.

  如果序列号要连续,则需要每个表创建一个,这样每个表的号是连续的;  
  如果数据量很大,最好分开;最大值、和最小值在你创建seqences可以指定。

分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

    在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    主要介绍了浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    oracle 主键自增 sequence

    以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环....

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    Oracle 创建和使用序列

    --创建序列 create sequence seq_user start with 1 increment by 1 nomaxvalue cache 10; --使用序列 insert into user_table(user_id,user_name,user_pwd) vlaues(seq_user.nextval,'tcy','tcy'); --修改...

    通过实例了解Oracle序列Sequence使用方法

    序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列, 序列中的可以升序生成,也可以降序生成。创建序列的语法是: 语法结构:创建序列 CREATE SEQUENCE sequence_name [START WITH ...

    MyBatis Oracle 自增序列的实现方法

    给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧

    oracle 存储过程使用 sequence

    NULL 博文链接:https://snowelf.iteye.com/blog/575555

    Oracle创建自增字段sequence

    Oracle中没有sqlserver中那么方便的自增序列,如果想要达到sqlserver中那种效果,也不是很麻烦,需要创建一个自增序列SEQUENCE,然后建一个触发器即可。  CREATE SEQUENCE emp_sequence  INCREMENT BY 1 — ...

    oracle 重置序列从指定数字开始的方法详解

    重置oracle序列从指定数字开始 代码如下: declare n number(10); v_startnum number(10):=10000001;–从多少开始 v_step number(10):=1;–步进 tsql varchar2(200); v_seqname varchar2(200):=’MIP_JF_SEQUENCE’;...

    详解ORACLE SEQUENCE用法

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: CREATE SEQUENCE seqTest INCREMENT...

    oracle中创建序列及序列补零实例详解

    oracle中创建序列及序列补零实例详解 我们经常会在在DB中创建序列: -- Create sequence create sequence COMMON_SEQ minvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20 cycle; 我们的序列的...

    生成oracle数据库中的所有sequence的语句

    可以根据oracle数据库中存在的sequence,生成建立语句

    MySQL实现类似Oracle序列的方案

    本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次。 Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是: 1、MySQL中新建表,用于存储序列名称和值; 2、创建函数,用于获取序列表中的值;...

    sequence-generator:比oracle sequence更加强大的序列生成器,支持分布式环境,配合MHA可完美做到高可用,与spring无缝集成,使用非常简单可靠

    sequence-generator简介类似于oracle的sequence,但更加强大支持分布式环境下sequence的生成使用乐观锁和AtomicLong确保sequence的唯一性使用及其简单db scriptCREATE TABLE sequence_database.sequence ( name ...

    Oracle 使用触发器创建自动序列号

    --序列drop sequence SEQ_TEST create sequence SEQ_TEST minvalue 1--最小值 nomaxvalue--不设置最大值 increment by 1--每次加1个 start with 1--从1开始计数,nocycle是一直累加,不循环 cache 20 order; --查...

    java自动生成Oracle sequence管理类

    Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...

    oracle_sequence.rar_oracle

    介绍了在oracle里,如何实现序列,并举例说明序列的实现方法

    sequence等同于序列号

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE ...

Global site tag (gtag.js) - Google Analytics