请问在使用oracle序列时,新的一天从新开始怎么实现?(前面会加上日期进行区分)
也就比方说今天
20141101001前面是今天的日期、后边3为才是序列;
当到明天时又从20141102001开始!
------解决思路----------------------
序列本身不能实现此类功能,序列需要重建才能重新从1开始取
你的这个需求可以使用两个序列,配合oracle定时任务进行实现
1、创建两个序列,假设为A、B
2、第一天使用序列A,到第二天使用序列B,利用定时任务重建A,第三天再使用序列A,利用定时任务重建B,如此往复
------解决思路----------------------
真想不出有啥难的,一共都没30行代码
--使用此方法获取下一个序列的值
FUNCTION GetSeqValue RETURN number IS
i number;
v_result number;
BEGIN
select mod(trunc(sysdate)-to_Date('2014-01-01','yyyy-mm-dd'),2) into i from dual;
if i=1 then
select SEQ_A.NEXTVAL into v_result from dual;
else
select SEQ_B.NEXTVAL into v_result from dual;
end if;
return v_result
END;
--下面这个在数据库做成定时任务
PROCEDURE ResetSeq IS
V_SeqName varchar2(100);
BEGIN
select decode(mod(trunc(sysdate)-to_Date('2014-01-01','yyyy-mm-dd'),2),1,'SEQ_B','SEQ_A')
INTO V_SeqName from dual;
EXECUTE IMMEDIATE 'DROP SEQUENCE '
------解决思路----------------------
V_SeqName;
EXECUTE IMMEDIATE 'CREATE SEQUENCE '
------解决思路----------------------
V_SeqName
------解决思路----------------------
' increment by 1 start with 1 nocache nocycle';
END;
--创建定时任务代码
VARIABLE jobno number;↙
begin
DBMS_JOB.SUBMIT(:jobno,
'ResetSeq;',
TRUNC(SYSDATE),'trunc(sysdate)+1');
commit;
end;