`

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** 是一种数据库对象,用于生成连续的整数序列。它可以被用来作为表中某一列的自动增长字段,例如主键ID。Sequence的主要优点是简单易用且性能高效。 #### 二、Sequence失效的原因 1. **数据迁移...

    分享ORACLE SEQUENCE跳号总结

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

    oracle 不用新建序列 重置序列(从1开始增长)

    在Oracle数据库管理中,序列是一种常用的对象,用于自动产生唯一的数值。序列通常被用来作为主键或唯一标识符,特别是在自动生成记录ID时。然而,有时候我们可能需要重置序列,使其从特定值开始,例如从1开始增长,...

    ORACLE SEQUENCE的简单介绍

    ### ORACLE SEQUENCE 的详细介绍与应用 #### 一、概述 在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **...

    oracle中sequence介绍及应用

    在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    java通过Mysql实现类似oracle序列功能序列.rar

    在Oracle数据库中,序列是一种非常重要的工具,它用于生成唯一的整数序列,通常用作主键。然而,MySQL数据库并没有内置的序列功能。在Java应用程序中,如果需要在MySQL环境中实现类似Oracle序列的功能,我们需要自己...

    让CoolSQL支持Oracle Sequence的GeneratedKey,懂的入

    首先,Oracle Sequence是一种用于生成唯一整数序列的数据库对象,常用于创建主键或唯一标识符。它允许开发者定义开始值、增量、缓存大小等参数,以满足不同场景的需求。例如,创建一个名为`USER_SEQ`的Sequence可以...

    oracle GoldenGate 同步oracle sequence的步骤

    ### Oracle GoldenGate 同步 Oracle Sequence 的步骤 Oracle GoldenGate 是一款强大的数据复制软件,能够实现跨平台的数据复制。在企业级应用环境中,为了确保数据的一致性和完整性,经常需要将源数据库中的序列...

    mysql生成oracle序列

    在数据库领域中,不同数据库管理系统(DBMS)之间存在显著差异,比如Oracle与MySQL在处理序列(sequence)的方式上就有本质的不同。Oracle提供了内置的支持来管理自动递增的数字序列,而MySQL并没有原生支持序列这一特性...

    oracle序列创建、修改、删除

    在Oracle数据库中,序列(Sequence)是一种特殊的数据对象,它能自动地生成唯一的整数,通常用于为主键字段提供连续的标识符。序列的使用极大地简化了数据插入过程,特别是对于那些需要保持唯一性的整数字段,如员工...

    oracle 建表 建序列

    ### Oracle 创建表与序列知识点详解 #### 一、Oracle创建表的基本语法与示例解析 在Oracle数据库中,创建表是进行数据管理的基础操作之一。下面将通过几个具体实例来详细解析创建表的过程。 ##### 示例1:创建...

    批量修改Oracle序列值的存储过程

    在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于主键生成或者自增字段。批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的...

    oracle索引、序列和权限设置

    在Oracle数据库管理中,索引、序列和权限设置是三个非常关键的概念,它们分别用于提高数据检索速度、自动生成唯一序列值以及控制数据库资源的访问权限。以下是对这些概念的详细解析,基于提供的实验内容: ### 一、...

    oracle自增序列

    ### Oracle自增序列知识点详解 在数据库应用中,序列是一种常用的数据对象,它能够自动产生唯一的数值,常用于实现表中的主键自增功能。Oracle数据库提供了强大的序列管理功能,可以方便地创建、管理和使用序列。...

    oracle导出序列

    在Oracle数据库管理中,序列(Sequences)是一种自动增长的数字序列,通常用于主键生成,确保数据的唯一性。序列对于大型应用系统的数据插入和更新操作尤其重要,因为它们可以提供一种高效、线程安全的方式来生成...

    Oracle使用序列创建自增字段

    Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。本文将详细介绍如何利用 Oracle 的序列功能来创建自增字段,并探讨其相关的配置选项及应用场景。 ### 创建序列 (Create Sequence) #### 基本语法与...

    Oracle数据库中序列的使用

    ### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...

    Oracle自增序列和触发器生成工具.zip

    在Oracle中,序列(SEQUENCE)是一种特殊的数据库对象,它能生成唯一的整数序列,通常用于创建主键。你可以定义序列的起始值、增长步长、是否循环等属性。例如,创建一个名为`MY_SEQ`的序列,初始值为1,每次递增1,...

Global site tag (gtag.js) - Google Analytics