oracle序列怎么連續(xù) oracle序列循環(huán)

關(guān)于oracle序列的問題

就是因?yàn)槟阒貑?shù)據(jù)庫(kù)的原因吧,因?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ù)

oracle sequence如何循環(huán)

你這個(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ǔ)過程我沒測(cè)試,但是編譯能過去

現(xiàn)在做個(gè)試驗(yàn)

執(zhí)行這樣一個(gè)語句

insert?into?test(name)?values?('aa');

然后你檢查下數(shù)據(jù),然后繼續(xù)插入再看看

select?*?from?test;

oracle創(chuàng)建序列的語法

--創(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

在oracle中建表的時(shí)候用的是自動(dòng)編號(hào), 刪除某些記錄后如何恢復(fù)自動(dòng)編號(hào)的序列號(hào)使其連續(xù)而不跳號(hào)?

如果使用了序列,那么這個(gè)跳號(hào)的問題只能通過編程來解決,否則是解決不了的。Oracle的序列對(duì)象只增加。

可以通過一個(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)等于刪除的那一張。

網(wǎng)頁名稱:oracle序列怎么連續(xù) oracle序列循環(huán)
網(wǎng)址分享:http://muchs.cn/article46/hgsshg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器品牌網(wǎng)站制作、ChatGPT微信小程序、App開發(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í)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)