如何使用Oracle序列:
創(chuàng)新互聯(lián)公司不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對營銷、技術(shù)、服務(wù)都有自己獨特見解,公司采取“創(chuàng)意+綜合+營銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時,也能得到同行業(yè)的專業(yè)認可,能夠為行業(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級,滿足企業(yè)一站式全網(wǎng)營銷推廣需求,讓再小的成都品牌網(wǎng)站建設(shè)也能產(chǎn)生價值!
Oracle序列(sequence)是一種數(shù)據(jù)庫項,能夠生成一個整數(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:序列開始整數(shù)
increment_num:每次增加的整數(shù)增量
maximum:序列最大整數(shù)
minimum:序列最小整數(shù)
CYCLE:循環(huán)生成
NOCYCLE:不循環(huán)生成,默認值
cache_num:保存在內(nèi)存中的整數(shù)的個數(shù)
NOCACHE:不緩存任何整數(shù)
例如:
CREATE SEQUENCE seq_test;(默認值)
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語句來修改序列??梢孕薷牡膬?nèi)容:
不能修改序列的初值
序列的最小值不能大于當前值
序列的最大值不能小于當前值
例如:ALTER SEQUENCE seq_test INCREMENT BY 3;
4、刪除序列:
DROP SEQUENCE seq_test;
項目使用SpringDataJPA+Hibernate+Oracle,使用Oracle序列設(shè)置Entity對應(yīng)的主鍵值,這個很常見。實現(xiàn)步驟如下:
1創(chuàng)建一個Oracle序列:
2在實體中引用:
現(xiàn)在同一個Entity實體的,另一個非主鍵字段也需要使用序列來設(shè)置值。后來自己發(fā)現(xiàn):不能在同一個Entity中,通過@GeneratedValue和@SequenceGenerator標簽使用多個Oracle序列。
使用SpringDataJPA的原生sql語句查詢序列的下一個值。然后在service層調(diào)用此方法獲取下一個序列值,手動設(shè)置到Entiry的非主鍵字段上去。
參考文章:
1.How do you get a Oracle Sequence value with JPA?
2.SpringDataJPA原生sql語句執(zhí)行
在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的當前值
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總是返回當前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會出錯。一次nextval會增加一次sequence的值,所以如果你在同一個語句里面使用多個nextval,其值就是不一樣的。明白?
-如果指定cache值,oracle就可以預先在內(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;
--創(chuàng)建序列的語法 --
CREATE SEQUENCE SEQ_POS_ORDER_ONLINE_ID
INCREMENT BY 1
START WITH 1000000000000042 -- 從1開始計數(shù) 或 MINVALUE 1 或 NOMINVALUE --的設(shè)置最小值 不設(shè)置最小值
NOMAXvalue -- 不設(shè)置最大值 或 MAXVALUE 10 --設(shè)置最大值 10
NOCYCLE -- 一直累加,不循環(huán) 或
CACHE 10; --設(shè)置緩存cache個序列,如果系統(tǒng)down掉了或者其它情況將會導致序列不連續(xù),也可以設(shè)置為---------NOCACHE
分享名稱:oracle序列如何設(shè)置,oracle序列怎么使用
網(wǎng)站鏈接:http://aaarwkj.com/article48/hsoehp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、品牌網(wǎng)站設(shè)計、微信小程序、面包屑導航、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)