`

oracle sequence ( 序列)

阅读更多
--序列 
/*
定义语法
CREATE SEQUENCE <sequence_name>
INCREMENT BY <integer> 每次的增量
START WITH <integer>   起始值 default=1
MAXVALUE <integer> / NOMAXVALUE  最大值或不限定
MINVALUE <integer> / NOMINVALUE  最小值或不限定
CYCLE / NOCYCLE     达到最大值时循环 或不循环 default NOCYCLE
CACHE <#> / NOCACHE  缓存(default 20) 或不循环 
ORDER / NOORDER;    排序或不排序   默认NOORDER
*/
create sequence seq_bird_1
       increment by 1  --每次加1
       start with 1    --从1开始计数
       maxvalue 100000 --最大值
       minvalue 1      --最小值
       nocycle         --一直累加,不循环
       cache 20        --缓存 20
       noorder         --不指定排序顺序
;

create sequence ssss;
select ssss.nextval from dual;
alter system flush shared_pool;--清空缓存,需要有足够的权限
--再次获取序列的nextval值,会把cache的最后一个值加上增量返回
select ssss.nextval from dual;
--select sys_guid() from dual;
--查询序列信息 定义属性信息都可查看到
select * from user_sequences us where us.sequence_name='SEQ_BIRD_1';
select * from user_objects uo where uo.object_name='SEQ_BIRD_1' and uo.object_type='SEQUENCE';
--使用序列
declare 
  v_seq int;
begin
    for i in 1..100 loop--循环取100次
        select seq_bird_1.nextval into v_seq from dual;--下一个值
        dbms_output.put('nextVal'||v_seq||'------');
        --当前值,刚创建的seq,必须执行nextval才可获取currval
        select seq_bird_1.currval into v_seq from dual;
        dbms_output.put('currVal'||v_seq);
        dbms_output.put_line('-');
    end loop;
end;
select seq_bird_1.nextval from dual;
--修改序列  除了start with不能修改其他的都可以修改
alter sequence seq_bird_1 increment by 2;
--删除序列
drop sequence seq_bird_1;

--把序列重置,回到初始位置 相当于间距修改序列的start with
--创建用于重置的序列
create sequence seq_test_2 start with 1 increment by 1;
--多执行几次nextval,
select seq_test_2.nextval from dual;
--创建用于重置序列的过程,参数为序列的名字
create or replace procedure reset_seq(seq_name  varchar2)
as
  curr_val int;
  d_sql_1 varchar2(200);
  d_sql_2 varchar2(200);
begin
  --把当前的序列值存放到变量中
  d_sql_1 :='select '||seq_name||'.nextval  from dual';
  execute immediate d_sql_1 into curr_val;
  --修改序列增量为当前当前值的相反数-1
  curr_val := -(curr_val-1);
  d_sql_2 := 'alter sequence '||seq_name||' increment by '||curr_val;
  execute immediate d_sql_2;
  --按上面修改的增量执行一次查询nextval,这时序列当前值变为1
  execute immediate d_sql_1 into curr_val;
  --从新设置序列的增量为1
  d_sql_2 := 'alter sequence '||seq_name||' increment by 1';
  execute immediate d_sql_2;
  --execute immediate d_sql_1 into curr_val;
  --dbms_output.put_line('修改后的现在序列初始值是:'||curr_val);
end;
--调用过程
begin
  empty_seq('seq_test_2');
end;

--reference
--http://psoug.org/reference/sequences.html
0
0
分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

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

    分享ORACLE SEQUENCE跳号总结

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

    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

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

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

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

    MyBatis Oracle 自增序列的实现方法

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

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

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

    详解ORACLE SEQUENCE用法

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

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

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

    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

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

    oracle自动增长列

    oracle自动增长列。 自动序列化, SEQUENCE。

    MySQL实现类似Oracle序列的方案

    Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,...

    oracle序列主键自增长

    当向表中插入数据时,主键值自动加一. 实现方法1: 建立一个最小为1,最大为nomaxvalue的一个序列号会自动循环的序列 create sequence 序列名 increment by 1 start with 1 nomaxvalue nocycle; .......

    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.rar_oracle

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

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

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

    oracle迁移mysql自增序列问题

    今天从oracle迁移数据到mysql碰到个需求:原先的主键字段需要改成mysql中的自增字段,而且原先数据的值不能变,以后新插入的值从原先数据最大的值开始自增。 解决办法: 构建环境: mysql&gt; CREATE TABLE test -&gt; ( ...

    如何实现Oracle自增,序列,触发器都有

    如何实现Oracle主键自增,通过写sequence和触发器,很全面,绝对帮你解决问题

Global site tag (gtag.js) - Google Analytics