利用Oracle定时任务重置序列
业务需求是:二元化编号规则:RYH+年月+001(开始),按月计算,每月1号重置为001
数据库中已有序列和函数如下:
解决方法:采用Oracle定时任务,每月1号重置该序列从1开始增长,SQL如下:
select GET_RYH_NO from dual; select SEQ_RYH_NO_ID.NEXTVAL from dual; select * from user_jobs;/*查询定时任务*/ /*新建每月01号重置二元化序列为1起始的存储过程*/ CREATE OR REPLACE procedure RESET_SEQ_RYH_NO_ID AS n NUMBER(10); tsql VARCHAR2(100); begin if TO_CHAR(SYSDATE,'DD') = '01' then /*每月1号重置*/ EXECUTE IMMEDIATE 'select SEQ_RYH_NO_ID.nextval from dual' INTO n; n := - (n - 1); tsql := 'alter sequence SEQ_RYH_NO_ID increment by ' || n; EXECUTE IMMEDIATE tsql; EXECUTE IMMEDIATE 'select SEQ_RYH_NO_ID.nextval from dual' INTO n; tsql := 'alter sequence SEQ_RYH_NO_ID increment by 1'; EXECUTE IMMEDIATE tsql; end if; end RESET_SEQ_RYH_NO_ID; /*定义定时任务*/ declare job number; BEGIN DBMS_JOB.SUBMIT( JOB => job, /*自动生成JOB_ID*/ WHAT => 'RESET_SEQ_RYH_NO_ID;', /*需要执行的存储过程名称或SQL语句*/ NEXT_DATE => sysdate, /*初次执行时间*/ INTERVAL => 'trunc(sysdate+1)' /*每隔1天执行一次*/ ); commit; end; /*移除定时任务*/ begin dbms_job.remove(126);/*括号中传入定时任务id*/ end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-11-12 Response响应对象