加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.52wenzhou.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 序列超过最大值时的异常处理

发布时间:2021-01-08 02:27:58 所属栏目:站长百科 来源:网络整理
导读:嗨非常新的oracle,如何在序列号达到最大值时捕获并重置它: 这是序列脚本: CREATE SEQUENCE idctr_seq MINVALUE 1 MAXVALUE 99 START WITH 1 INCREMENT BY 1 CACHE 10; 然后这是代码,当序列达到最大值时,它尝试将值重置为1.如果代码有效,我稍后会将其转换为

嗨非常新的oracle,如何在序列号达到最大值时捕获并重置它:

这是序列脚本:

CREATE SEQUENCE idctr_seq
  MINVALUE 1
  MAXVALUE 99
  START WITH 1
  INCREMENT BY 1
  CACHE 10;

然后这是代码,当序列达到最大值时,它尝试将值重置为1.如果代码有效,我稍后会将其转换为函数,但它会失败.

declare
    seq_num number;
    exceed_maxvalue exception;
    pragma exception_init(exceed_maxvalue,-8004);
begin
    seq_num := idctr_seq.nextval;
    DBMS_OUTPUT.PUT_LINE(seq_num);
    exception
    when exceed_maxvalue then
        execute immediate 'sequence idctr_seq increment by -99 minvalue 0';
        execute immediate 'select idctr_seq.nextval from dual';
        execute immediate 'alter sequence idctr_seq increment by 1 minvalue 0';
end;

如果我运行代码直到达到最大值,它不会产生错误,但它也不会将自身重置为1.

解决方法

这是 CYCLE关键字的用例;报价

indicate that the sequence continues to generate values after reaching either its maximum or minimum value. After an ascending sequence reaches its maximum value,it generates its minimum value. After a descending sequence reaches its minimum,it generates its maximum value.

您的对象声明应该变为:

CREATE SEQUENCE idctr_seq
  MINVALUE 1
  MAXVALUE 99
  START WITH 1
  INCREMENT BY 1
  CACHE 10
  CYCLE;

这是一个较小序列的演示

SQL> create sequence test_seq start with 1 maxvalue 3 nocache cycle;

Sequence created.

SQL> select test_seq.nextval from dual;

   NEXTVAL
----------
         1

SQL> select test_seq.nextval from dual;

   NEXTVAL
----------
         2

SQL> select test_seq.nextval from dual;

   NEXTVAL
----------
         3

SQL> select test_seq.nextval from dual;

   NEXTVAL
----------
         1

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读