之前一直有误区,说明下:
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
利用oracle 系统触发器防止用户使用drop table 或truncate table 命令。
oracle 创建序列 完整步骤
oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例 oracle数据库触发器实例
1、行级触发器不支持 ...所以想要触发器对自身表数据做修该,则用行级触发器得到 :new 和 :old对象中的相关数据,然后将这样的数据保存到 package中,然后在语句级触发期中调用 package包中保存的数据,进行更新操作
oracle_触发器的种类和触发事件,很详细!
oracle批量生成表和触发器和序列
oracle触发器实现主键自动增长操作
调试oracle触发器文档,自己整理的,不懂的可以聊系我
oracle 增加序列 触发器 全过程 sql文件只需更换表名
从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...
Oracle Form 触发器的执行顺序
介绍数据库触发器的PPT。内容包括:存储过程的创建与使用;存储过程的查看、编辑和删除;触发器的创建与使用;触发器的查看、编辑、重命名和删除
很详细的oracle创建触发器的例子
在sqlserver中,可以用identity实现自动增长值,但在oracle中,没有identity,可以用其它的实现,这里就是用序列实现的自动增长值。
oracle 触发器方式实现行ID自增加介绍的很详细! 大家好好学习啊
oracle insert数据成功之后调用触发器,触发器调用存储过程,存储实时调用java http
个人亲测oracle触发器调用java程序
Oracle通过触发器或者同义词避免用户修改表结构,2种实现方式,可根据自身需要来选择