創(chuàng)建序列
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比大廠網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式大廠網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋大廠地區(qū)。費(fèi)用合理售后完善,十載實體公司更值得信賴。
CREATE SEQUENCE SEQUENCE_NAME
START WITH 10
INCREMENT BY 10
MAXVALUE 2000
MINVALUE 10
NOCYCLE
CACHE 10
?通過序列的偽列來訪問序列的值
–SEQUENCE_NAME.NEXTVAL
返回序列的下一個值
–SEQUENCE_NAME.CURRVAL
返回序列的當(dāng)前值
oracle是沒有自增類型字段的,你可以用觸發(fā)器,每次insert都觸發(fā)獲取一次這個序列的nextval就行。
不過序列是有緩存的,所以插入的數(shù)字有可能不是連續(xù)的。
如果一定要避免這個問題,你可以不用序列,而采用日志表的形式,在表中記錄最大的編號。如果對性能沒有要求,直接在插入表中統(tǒng)計也未嘗不可。
oracle的序列做主鍵有一個問題的,序列用過一次就+1,比如你的序列,當(dāng)前是2,增量為1,如果在查詢中有地方用到這個序列,每用到這個序列就會按增量變化,你注意看下你的程序里有沒有查詢用到這個序列,
另外,那個序列,初始必須,nextval一次,這個你用之前判斷一次唄,看值是幾,如果沒有,就調(diào)一次nextval
如果可以,請貼出調(diào)用序列的那部分代碼,以便查找問題,
在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。
1、createsequence
你首先要有createsequence或者createanysequence權(quán)限,
createsequenceemp_sequence
incrementby1--每次加幾個
startwith1--從1開始計數(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語句
-insert語句的子查詢中
-nsert語句的values中
-update的set中
可以看如下例子:
insertintoempvalues
(empseq.nextval,'lewis','clerk',7902,sysdate,1200,null,20);
selectempseq.currvalfromdual;
但是要注意的是:
-第一次nextval返回的是初始值;隨后的nextval會自動增加你定義的incrementby值,然后返回增加后的值。currval總是返回當(dāng)前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會出錯。一次nextval會增加一次sequence的值,所以如果你在同一個語句里面使用多個nextval,其值就是不一樣的。明白?
-如果指定cache值,oracle就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。使用cache或許會跳號,比如數(shù)據(jù)庫突然不正常down掉(shutdownabort),cache中的sequence就會丟失.所以可以在createsequence的時候用nocache防止這種情況。
2、altersequence
你或者是該sequence的owner,或者有alteranysequence權(quán)限才能改動sequence.可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須dropsequence再re-create.
altersequence的例子
altersequenceemp_sequence
incrementby10
maxvalue10000
cycle--到10000后從頭開始
nocache;
影響sequence的初始化參數(shù):
sequence_cache_entries=設(shè)置能同時被cache的sequence數(shù)目。
可以很簡單的dropsequence
dropsequenceorder_seq;
1. oracle的邏輯是,同一會話中,必須先通過NEXTVAL后,才能獲取CURRVAL值
2. 關(guān)于跳號,應(yīng)該是cache的作用
你可以在SQL窗口打出sequence名稱,右鍵- 屬性,或右鍵-查看,來查看SEQ信息
3. oracle的邏輯sequence是不會rollback的,如果想要改變start值(或當(dāng)前值),必須 drop sequence 再 re-create .
給你個說明:
CREATE SEQUENCE test_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數(shù)
NOMAXVALUE -- 不設(shè)置最大值
NOCYCLE -- 一直累加,不循環(huán)
CACHE 10;
一旦定義了test_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的當(dāng)前值(第一查詢時會報未初始化,調(diào)用一次NEXTVAL后可用)
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
test_sequence.CURRVAL
test_sequence.NEXTVAL
可以使用sequence的地方:
- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- NSERT語句的VALUES中
- UPDATE 的 SET中
本文標(biāo)題:oracle怎么調(diào)序列 oracle怎么修改序列
鏈接分享:http://muchs.cn/article44/hjcdee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、企業(yè)建站、虛擬主機(jī)、服務(wù)器托管、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)