`

oracle通过触发器 更新序列下次增长值

阅读更多
之前一直有误区,说明下:
1.oracle无法直接修改 next下次的值。
2.设置自动增长的步长 可以是负数。

办法:
通过修改 步长为负数,获取一次序列,把序列弄回到1,然后把步长修改成正常的数字。

create or replace procedure RESET_PAGE_NUM_SEQ AS
  v_count NUMBER(10);
  v_sql   VARCHAR2(100);
begin

  --获取当前序列AM_BDC_PAGE_NUM_SEQ_TEST的下一个值  
  EXECUTE IMMEDIATE 'select AM_BDC_PAGE_NUM_SEQ_TEST.nextval curr_val from dual'
    INTO v_count;

  if v_count > 5000 then
  --变成负数
  v_count := (v_count - 1) * -1;

  --将每次增长的值改成负数
  v_sql := 'alter sequence AM_BDC_PAGE_NUM_SEQ_TEST increment by ' ||
           v_count;
  EXECUTE IMMEDIATE v_sql;

  ---获取调整后的下一个值,将下一次获取的值更新到1
  EXECUTE IMMEDIATE 'select AM_BDC_PAGE_NUM_SEQ_TEST.nextval curr_val from dual'
  INTO v_count;

  ----修改序列为原来的规则 
  EXECUTE IMMEDIATE 'alter sequence AM_BDC_PAGE_NUM_SEQ_TEST increment by 1';

  ---再次调用一次 
  EXECUTE IMMEDIATE 'select AM_BDC_PAGE_NUM_SEQ_TEST.nextval from dual'
    INTO v_count;
 end if;
EXCEPTION

  WHEN OTHERS THEN
    
  EXECUTE IMMEDIATE 'alter sequence AM_BDC_PAGE_NUM_SEQ_TEST increment by 1';
  EXECUTE IMMEDIATE 'select AM_BDC_PAGE_NUM_SEQ_TEST.nextval from dual';
  

end RESET_PAGE_NUM_SEQ;


begin
  sys.dbms_job.submit(job => :job,
                      what => 'RESET_PAGE_NUM_SEQ;',
                      next_date => to_date('31-03-2022 22:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'trunc(sysdate) + 22/24');
  commit;
end;
/




分享到:
评论

相关推荐

    创建Oracle触发器用于表中序列值自增长(Helloblock写作)

    ### 创建Oracle触发器用于表中序列值自增长 在Oracle数据库中,为了实现表中某个字段的自动递增功能,通常会使用序列(sequence)结合触发器(trigger)的方式来完成。这种方式不仅能够确保数据的一致性和完整性,...

    oracle触发器实现主键自动增长

    ### Oracle触发器与序列 在Oracle中,触发器是一种存储过程,它被定义为当特定事件(如数据的插入、更新或删除)发生时自动执行的一段代码。通过触发器,我们可以在不修改应用程序逻辑的情况下,对数据库中的数据...

    oracle快速批量生成表和触发器和序列.zip

    在Oracle数据库管理中,批量生成表、触发器和序列是一项常见的任务,特别是在系统初始化或数据迁移时。这个压缩包文件“oracle快速批量生成表和触发器和序列.zip”显然是为了帮助用户快速完成这类操作。下面将详细...

    oracle 触发器方式实现行ID自增加

    本文将深入探讨如何使用Oracle触发器来实现行ID的自增加。 首先,我们得了解什么是触发器。在Oracle中,触发器是一种数据库对象,它可以在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行预先定义的...

    oracle中用序列实现自动增长值

    在Oracle数据库系统中,与SQL Server中的`IDENTITY`特性类似,我们可以通过使用序列(Sequences)来实现字段的自动增长值。序列是一种特殊的数据库对象,它可以生成一系列有序的数值,通常用于为表的主键字段提供...

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

    接下来,我们讨论Oracle触发器(TRIGGER)。触发器是数据库中预定义的程序,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。在我们的场景中,我们可能需要一个触发器来在插入新记录时自动获取...

    详解Oracle序列和触发器的使用

    **二、Oracle触发器** 触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行一段PL/SQL代码。触发器常用于实现业务规则、数据验证和自动更新等操作。 在本例中,我们创建了...

    oracle序列和触发器的建立

    通过创建序列和触发器,我们可以实现在插入新记录时自动为主键字段生成唯一值的功能。这种方式不仅可以简化开发人员的工作,还可以确保数据的一致性和完整性。在实际应用中,序列和触发器是非常有用的工具,能够帮助...

    oracle设置主外键即主键序列自动增长

    下面将详细介绍如何在Oracle中创建包含主键和外键的表,并利用触发器(Trigger)和序列实现主键的自动增长。 #### 一、创建包含主键和外键的表 首先,我们来看一下创建包含主键和外键的表的基本语法和步骤。 ####...

    oracle序列主键自增长

    这样,每当有新的记录插入或更新时,触发器都会自动为指定的主键列赋值下一个序列值。 #### 三、示例代码 接下来,我们将通过一个具体的示例来展示如何创建序列以及使用它来自动生成主键值。 **创建序列** ```...

    oracle 触发器

    Oracle触发器是数据库对象,它在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行,可以用于实现复杂的业务逻辑和数据完整性约束。触发器由触发器语句、触发器限制和触发器操作三部分构成。 1. **...

    Oracle数据库表序列ID自增生成器

    总结来说,Oracle数据库表序列ID自增生成器结合了序列和触发器的概念,实现了主键ID的自动增长。这种机制在处理大量数据和并发操作时,能确保数据的完整性和一致性。了解并熟练运用这些知识点,对于进行高效的Oracle...

    oracle实现属性的自增

    相反,Oracle 是通过序列和触发器来实现属性的自动增长的。 知识点二: 序列(Sequence) 序列是 Oracle 中的一种机制,可以生成连续的数字序列。序列可以用来生成唯一的标识符、自动增长的数字等。 知识点三: ...

    创建序列触发器

    通过创建序列,我们可以轻松地为表中的某列提供自动增长的唯一标识符。 ##### 创建序列的基本语法: ```sql CREATE SEQUENCE sequence_name INCREMENT BY increment_value START WITH start_value MAXVALUE max_...

    Oracle使用序列创建自增字段

    - **NEXTVAL**:返回序列的下一个值,并更新序列的当前值。 例如,执行 `SEQ_EMP.NEXTVAL` 将会返回序列的下一个值,并使当前值变为这个新值;而 `SEQ_EMP.CURRVAL` 则返回序列的当前值。 ### 修改序列 (Alter ...

    oracle字段自增长

    Oracle 字段自增长是指在 Oracle 数据库中,通过创建序列和触发器来实现字段的自动增长功能。在 Java 编程过程中,这种机制可以用来生成唯一的序号,例如订单号、流水号等。 在 Oracle 10g 中,实现字段自增长需要...

    如何为oracle中的表增加自动增长列.pdf

    在Oracle数据库中,表的自动增长列通常是指使用序列(SEQUENCE)或者使用Oracle提供的自动增长数据类型(例如:IDENTITY或者GENERATED AS IDENTITY),以实现表中某列值能够随着记录的增加而自动递增。本文将介绍...

    oracle主键自动增长

    本文详细介绍了如何在Oracle数据库中实现主键的自动增长功能,主要包括了序列和触发器的使用方法。通过这些技术,可以在不依赖于数据库本身的特性的情况下,灵活地实现主键的自增,从而满足各种应用场景的需求。

    Oracle触发器

    Oracle触发器是数据库管理系统Oracle中的一个重要特性,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)发生之前或之后执行一段预定义的PL/SQL代码。触发器主要用于实现复杂的数据完整性约束,或者进行自动化...

Global site tag (gtag.js) - Google Analytics