oracle – 序列超过最大值时的异常处理
嗨非常新的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关键字的用例;报价
您的对象声明应该变为: 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 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |