就是因?yàn)槟阒貑?shù)據(jù)庫(kù)的原因吧,因?yàn)槟阍O(shè)置了緩沖,cache size是保存在內(nèi)存中的,重啟之后應(yīng)該就消失了,不會(huì)被保存。
我們提供的服務(wù)有:網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、北屯ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的北屯網(wǎng)站制作公司
嗯,樓上的回答也是原因之一,不過(guò)樓上的有一種方法避免,就是在確認(rèn)會(huì)正確commit之后,再取seq的值,不過(guò)一般沒(méi)什么意義,seq只是為了自動(dòng)生成主鍵或者是給一個(gè)數(shù)據(jù)編成系統(tǒng)唯一標(biāo)識(shí)用的,沒(méi)啥意義,不用保持連續(xù)
你這個(gè)其實(shí)挺復(fù)雜的,要建立一系列的東西來(lái)滿足你這個(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ǔ)過(guò)程,這個(gè)很重要,每天半夜12點(diǎn)執(zhí)行一次,這個(gè)主要是把序列重新置0用的,然后還需要定義一個(gè)job來(lái)調(diào)用這個(gè)存儲(chǔ)過(guò)程
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ǔ)過(guò)程我沒(méi)測(cè)試,但是編譯能過(guò)去
現(xiàn)在做個(gè)試驗(yàn)
執(zhí)行這樣一個(gè)語(yǔ)句
insert?into?test(name)?values?('aa');
然后你檢查下數(shù)據(jù),然后繼續(xù)插入再看看
select?*?from?test;
--創(chuàng)建序列的語(yǔ)法 --
CREATE SEQUENCE SEQ_POS_ORDER_ONLINE_ID
INCREMENT BY 1
START WITH 1000000000000042 -- 從1開(kāi)始計(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)的問(wèn)題只能通過(guò)編程來(lái)解決,否則是解決不了的。Oracle的序列對(duì)象只增加。
可以通過(guò)一個(gè)觸發(fā)器來(lái)實(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)等于刪除的那一張。
網(wǎng)頁(yè)名稱:oracle序列怎么連續(xù) oracle序列循環(huán)
網(wǎng)址分享:http://chinadenli.net/article46/hgsshg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、品牌網(wǎng)站制作、ChatGPT、微信小程序、App開(kāi)發(fā)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容