就是因?yàn)槟阒貑?shù)據(jù)庫的原因吧,因?yàn)槟阍O(shè)置了緩沖,cache size是保存在內(nèi)存中的,重啟之后應(yīng)該就消失了,不會(huì)被保存。
我們提供的服務(wù)有:網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、北屯ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的北屯網(wǎng)站制作公司
嗯,樓上的回答也是原因之一,不過樓上的有一種方法避免,就是在確認(rèn)會(huì)正確commit之后,再取seq的值,不過一般沒什么意義,seq只是為了自動(dòng)生成主鍵或者是給一個(gè)數(shù)據(jù)編成系統(tǒng)唯一標(biāo)識(shí)用的,沒啥意義,不用保持連續(xù)
你這個(gè)其實(shí)挺復(fù)雜的,要建立一系列的東西來滿足你這個(gè)需求
給你做個(gè)實(shí)驗(yàn)吧
先建立一個(gè)表
create?table?test
(id?varchar2(20)?not?null?primary?key?,
name?varchar2(100));
創(chuàng)建一個(gè)序列
create?sequence?seqTest?
increment?by?1?
start?with?1?
maxvalue?999
nocycle?
cache?10;
創(chuàng)建一個(gè)存儲(chǔ)過程,這個(gè)很重要,每天半夜12點(diǎn)執(zhí)行一次,這個(gè)主要是把序列重新置0用的,然后還需要定義一個(gè)job來調(diào)用這個(gè)存儲(chǔ)過程
create?or?replace?procedure?p_seq
as
n?number(10);
v_sql?varchar2(100);
begin
select?seqTest.nextval?into?n?from?dual;
n:=-(n-1);
v_sql:='alter?sequence?seqTest?increment?by'||?n;
execute?immediate?v_sql;
select?seqTest.nextval?into?n?from?dual;
v_sql:='alter?sequence?seqTest?increment?by?1';
execute?immediate?v_sql;
end;
然后創(chuàng)建一個(gè)觸發(fā)器
create?or?replace?trigger?t_test???????
before?insert?on?test???????
for?each?row???????
begin???????
select?to_char(sysdate,'yyyymmdd')||'_'||lpad(seqTest.nextval,3,0)?into?:new.id?from?dual;?????
end?;
存儲(chǔ)過程我沒測試,但是編譯能過去
現(xiàn)在做個(gè)試驗(yàn)
執(zhí)行這樣一個(gè)語句
insert?into?test(name)?values?('aa');
然后你檢查下數(shù)據(jù),然后繼續(xù)插入再看看
select?*?from?test;
--創(chuàng)建序列的語法 --
CREATE SEQUENCE SEQ_POS_ORDER_ONLINE_ID
INCREMENT BY 1
START WITH 1000000000000042 -- 從1開始計(jì)數(shù) 或 MINVALUE 1 或 NOMINVALUE --的設(shè)置最小值 不設(shè)置最小值
NOMAXvalue -- 不設(shè)置最大值 或 MAXVALUE 10 --設(shè)置最大值 10
NOCYCLE -- 一直累加,不循環(huán) 或
CACHE 10; --設(shè)置緩存cache個(gè)序列,如果系統(tǒng)down掉了或者其它情況將會(huì)導(dǎo)致序列不連續(xù),也可以設(shè)置為---------NOCACHE
如果使用了序列,那么這個(gè)跳號(hào)的問題只能通過編程來解決,否則是解決不了的。Oracle的序列對象只增加。
可以通過一個(gè)觸發(fā)器來實(shí)現(xiàn)序列號(hào)字段的處理,一旦插入新數(shù)據(jù),就根據(jù)掃描的結(jié)果,修改序列號(hào)字段的值為最大值+1,或者某個(gè)值,根據(jù)定義的規(guī)則確定。
有的財(cái)務(wù)系統(tǒng)憑證號(hào)必須連續(xù),當(dāng)中間的某一張憑證刪除后就有這種需求,要求新產(chǎn)生的憑證號(hào)等于刪除的那一張。