最近在做一个任务管理系统,任务表ID被设计成流水号的形式(方便其子任务的查询统计),准备以当天的日期+当天最大任务数量组成。
java 代码
- public static String getNo(){
- long No = 0;
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- String nowdate = sdf.format(new Date());
- No = Long.parseLong(nowdate)*1000;
- No+=getTaskNo();
- return getUserId+No;
- }
- public static int getTaskNo(){//返回当天的任务数+1
- return 001;
- }
日期后面的递增值想通过oracel序列来获得,从网上找了个重置序列的存储过程
sql 代码
- SQL> create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;
- 序列已创建。
- SQL> create or replace procedure seq_reset(v_seqname varchar2) as
- 2 n number(10);
- 3 tsql varchar2(100);
- 4 begin
- 5 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
- 6 n:=-(n-1);
- 7 tsql:='alter sequence '||v_seqname||' increment by '|| n;
- 8 execute immediate tsql;
- 9 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
- 10 tsql:='alter sequence '||v_seqname||' increment by 1';
- 11 execute immediate tsql;
- 12 end seq_reset;
- 13 /
创建一个JOB,让其每天零点的时候调用重置序列的过程
sql 代码
- declare
- job1 integer;
- begin
- sys.dbms_job.submit(job1 , 'PROCEDURE__NAME(参数);', to_date('20050603 01:00:00', 'yyyymmdd hh24:mi:ss'), -- 计划的初次执行日期,请根据具体情况设定
- 'to_date(to_char(sysdate+1,''yyyymmdd'')||''01:00:00'',''yyyymmdd hh24:mi:ss'')');
- commit;
- end;