oracle中流水号的生成

最近在做一个任务管理系统,任务表ID被设计成流水号的形式(方便其子任务的查询统计),准备以当天的日期+当天最大任务数量组成。

java 代码
  1. public static String getNo(){    
  2. long No = 0;    
  3. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");    
  4. String nowdate = sdf.format(new Date());    
  5. No = Long.parseLong(nowdate)*1000;   
  6. No+=getTaskNo();    
  7. return getUserId+No;    
  8. }    
  9. public static int getTaskNo(){//返回当天的任务数+1    
  10. return 001;    
  11. }    

日期后面的递增值想通过oracel序列来获得,从网上找了个重置序列的存储过程

sql 代码
  1. SQL> create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;   
  2.   
  3. 序列已创建。   
  4. SQL> create or replace procedure seq_reset(v_seqname varchar2) as  
  5.   2  n number(10);   
  6.   3  tsql varchar2(100);   
  7.   4  begin  
  8.   5  execute immediate 'select '||v_seqname||'.nextval from dual' into n;   
  9.   6  n:=-(n-1);   
  10.   7  tsql:='alter sequence '||v_seqname||' increment by '|| n;   
  11.   8  execute immediate tsql;   
  12.   9  execute immediate 'select '||v_seqname||'.nextval from dual' into n;   
  13.  10  tsql:='alter sequence '||v_seqname||' increment by 1';   
  14.  11  execute immediate tsql;   
  15.  12  end seq_reset;   
  16.  13  /   
  17.   

创建一个JOB,让其每天零点的时候调用重置序列的过程

sql 代码
  1. declare      
  2.       job1   integer;      
  3. begin      
  4.       sys.dbms_job.submit(job1 ,  'PROCEDURE__NAME(参数);', to_date('20050603   01:00:00',   'yyyymmdd   hh24:mi:ss'), --   计划的初次执行日期,请根据具体情况设定      
  5.     'to_date(to_char(sysdate+1,''yyyymmdd'')||''01:00:00'',''yyyymmdd   hh24:mi:ss'')');      
  6.       commit;      
  7.   end;      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值