十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
序列本身沒(méi)辦法直接歸零,只能是刪掉然后重建。刪除序列要用到drop語(yǔ)句和建立的create語(yǔ)句都是ddl語(yǔ)句,在存儲(chǔ)過(guò)程中是沒(méi)辦法應(yīng)用的。個(gè)人建議寫成一個(gè)sql腳本,然后在操作系統(tǒng)層面設(shè)定為每隔一年運(yùn)行一次。

創(chuàng)新互聯(lián)公司從2013年成立,先為田家庵等服務(wù)建站,田家庵等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為田家庵企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
如何使用Oracle序列:
Oracle序列(sequence)是一種數(shù)據(jù)庫(kù)項(xiàng),能夠生成一個(gè)整數(shù)序列。通常用于填充數(shù)字類型的主鍵列。
1、創(chuàng)建序列:
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num|NOMAXVALUE}]
[{MINVALUE minimum_num|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE cache_num|NOCACHE}]
[{ORDER|NOORDER}]
其中:
start_num:序列開(kāi)始整數(shù)
increment_num:每次增加的整數(shù)增量
maximum:序列最大整數(shù)
minimum:序列最小整數(shù)
CYCLE:循環(huán)生成
NOCYCLE:不循環(huán)生成,默認(rèn)值
cache_num:保存在內(nèi)存中的整數(shù)的個(gè)數(shù)
NOCACHE:不緩存任何整數(shù)
例如:
CREATE SEQUENCE seq_test;(默認(rèn)值)
CREATE SEQUENCE seq_test START WITH 1 INCREMENT BY 2;
2、使用序列:
SELECT seq_test.nextval FROM dual;
insert into order_status2 (id) values (seq_test.nextval);
3、修改序列:
ALTER SEQUENCE語(yǔ)句來(lái)修改序列??梢孕薷牡膬?nèi)容:
不能修改序列的初值
序列的最小值不能大于當(dāng)前值
序列的最大值不能小于當(dāng)前值
例如:ALTER SEQUENCE seq_test INCREMENT BY 3;
4、刪除序列:
DROP SEQUENCE seq_test;
在oracle中sequence就是所謂的序列號(hào),每次取的時(shí)候它會(huì)自動(dòng)增加,一般用在需要按序列號(hào)排序的地方。
1、createsequence
你首先要有createsequence或者createanysequence權(quán)限,
createsequenceemp_sequence
incrementby1--每次加幾個(gè)
startwith1--從1開(kāi)始計(jì)數(shù)
nomaxvalue--不設(shè)置最大值
nocycle--一直累加,不循環(huán)
cache10;
一旦定義了emp_sequence,你就可以用currval,nextval
currval=返回sequence的當(dāng)前值
nextval=增加sequence的值,然后返回sequence值
比如:
emp_sequence.currval
emp_sequence.nextval
可以使用sequence的地方:
-不包含子查詢、snapshot、view的select語(yǔ)句
-insert語(yǔ)句的子查詢中
-nsert語(yǔ)句的values中
-update的set中
可以看如下例子:
insertintoempvalues
(empseq.nextval,'lewis','clerk',7902,sysdate,1200,null,20);
selectempseq.currvalfromdual;
但是要注意的是:
-第一次nextval返回的是初始值;隨后的nextval會(huì)自動(dòng)增加你定義的incrementby值,然后返回增加后的值。currval總是返回當(dāng)前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會(huì)出錯(cuò)。一次nextval會(huì)增加一次sequence的值,所以如果你在同一個(gè)語(yǔ)句里面使用多個(gè)nextval,其值就是不一樣的。明白?
-如果指定cache值,oracle就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動(dòng)再取一組到cache。使用cache或許會(huì)跳號(hào),比如數(shù)據(jù)庫(kù)突然不正常down掉(shutdownabort),cache中的sequence就會(huì)丟失.所以可以在createsequence的時(shí)候用nocache防止這種情況。
2、altersequence
你或者是該sequence的owner,或者有alteranysequence權(quán)限才能改動(dòng)sequence.可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須dropsequence再re-create.
altersequence的例子
altersequenceemp_sequence
incrementby10
maxvalue10000
cycle--到10000后從頭開(kāi)始
nocache;
影響sequence的初始化參數(shù):
sequence_cache_entries=設(shè)置能同時(shí)被cache的sequence數(shù)目。
可以很簡(jiǎn)單的dropsequence
dropsequenceorder_seq;
Oracle 序列(Sequence)主要用于生成流水號(hào),Oracle EBS系統(tǒng)中是經(jīng)常用到的。但是,有時(shí)需要修改序列初始值(START WITH)時(shí),好多人憑感覺(jué)認(rèn)為:Alter Sequence SequenceName Start With N。事實(shí)上,在Oracle Db中,修改序列沒(méi)有這樣的語(yǔ)法。沒(méi)有這樣的語(yǔ)法情況怎么辦,有二種方法可以完成
1.先刪除序列,然后重新創(chuàng)建。不過(guò)這不是當(dāng)前要講的重點(diǎn)。這個(gè)方法比較方便。
2.通過(guò)Increment By來(lái)實(shí)現(xiàn)修改初始值。
例如:若序列名稱是SeqTest2010_S,初始值是13,而現(xiàn)在要設(shè)置初始值為1020,Increment By值為:1007(1020-13)
2.1 執(zhí)行:Alter Sequence SeqTest2010_S Increment By 1007;
2.2 執(zhí)行:Select SeqTest2010_S.NextVal From Dual;
2.3 執(zhí)行:Alter Sequence SeqTest2010_S Increment By 1;
修改完成。簡(jiǎn)單吧
先清除表中的數(shù)據(jù)(如:delete from user_info)
刪除序列(如:drop sequence sq_user)
重新添加序列(如:create sequence sq_user)
添加數(shù)據(jù)進(jìn)行驗(yàn)證一下就好了
主鍵表 - T表 '100W'數(shù)據(jù)同步到T1表(同步:TRUNCATE/DELETE或IMPDP...等方式[手動(dòng)改數(shù)據(jù)])
例如: T表對(duì)應(yīng)SEQ_T.NEXTVAL= 100W;
T1表對(duì)應(yīng)SEQ_T.NEXTVAL= 10W;
TRUNCATE TABLE T1;
INSERT TABLE T1 SELECT * FROM T;
數(shù)據(jù)同步但T1表對(duì)應(yīng)SEQ_T.NEXTVAL= 10W序列不變;
此時(shí)T1調(diào)用序列INSERT到T1表時(shí)就會(huì)報(bào)錯(cuò) ( ORA-00001 : 違反唯一約束條件 (LOTTERY.PK_T1))
(若批量同步很多表就可能會(huì)引起很多表序列需要更新成主鍵最大值+ 1才能保證不報(bào)錯(cuò)
(可以用把源庫(kù)的SEQUENCE同步過(guò)來(lái)①或者如下存儲(chǔ)解決② ))