更新時(shí)間:2021-03-01 17:36:57 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1170次
Oracle是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一,而序列是一個(gè)計(jì)數(shù)器,它并不會(huì)與特定的表關(guān)聯(lián),通過創(chuàng)建Oracle序列和觸發(fā)器實(shí)現(xiàn)表的主鍵自增。 序列一般是用來填充主鍵和計(jì)數(shù)的,不占用磁盤空間,占用內(nèi)存。本文我們重點(diǎn)來講述一下Oracle序列。
1、創(chuàng)建序列
ORACLE序列的語法格式為:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
1)INCREMENT BY用于定義序列的步長(zhǎng),如果省略,則默認(rèn)為1,如果出現(xiàn)負(fù)值,則代表Oracle序列的值是按照此步長(zhǎng)遞減的。
2)START WITH 定義序列的初始值(即產(chǎn)生的第一個(gè)值),默認(rèn)為1。
3)MAXVALUE 定義序列生成器能產(chǎn)生的最大值。選項(xiàng)NOMAXVALUE是默認(rèn)選項(xiàng),代表沒有最大值定義,這時(shí)對(duì)于遞增Oracle序列,系統(tǒng)能夠產(chǎn)生的最大值是10的27次方;對(duì)于遞減序列,最大值是-1。
4)MINVALUE定義序列生成器能產(chǎn)生的最小值。選項(xiàng)NOMAXVALUE是默認(rèn)選項(xiàng),代表沒有最小值定義,這時(shí)對(duì)于遞減序列,系統(tǒng)能夠產(chǎn)生的最小值是?10的26次方;對(duì)于遞增序列,最小值是1。
5)CYCLE和NOCYCLE 表示當(dāng)序列生成器的值達(dá)到限制值后是否循環(huán)。CYCLE代表循環(huán),NOCYCLE代表不循環(huán)。如果循環(huán),則當(dāng)遞增序列達(dá)到最大值時(shí),循環(huán)到最小值;最小值為1。對(duì)于遞減序列達(dá)到最小值時(shí),循環(huán)到最大值。如果不循環(huán),達(dá)到限制值后,繼續(xù)產(chǎn)生新值就會(huì)發(fā)生錯(cuò)誤。
ORACLE OCP考試有道題關(guān)于序列,如下所示
Evaluate the following CREATE SEQUENCE statement:
CREATE SEQUENCE seq1
START WITH 100
INCREMENT BY 10
MAXVALUE 200
CYCLE
NOCACHE;
The sequence SEQ1 has generated numbers up to the maximum limit of 200. You issue the following
SQL statement:
SELECT seq1.nextval FROM dual;
What is displayed by the SELECT statement?
A. 1
B. 10
C. 100
D. an error
答案:A
6)CACHE(緩沖)定義存放序列的內(nèi)存塊的大小,默認(rèn)為20。NOCACHE表示不對(duì)序列進(jìn)行內(nèi)存緩沖。對(duì)序列進(jìn)行內(nèi)存緩沖,可以改善序列的性能。 緩存選項(xiàng)會(huì)造成數(shù)據(jù)丟失,當(dāng)實(shí)例異常關(guān)閉時(shí)。
2.刪除序列
語法是DROP SEQUENCE [schema].序列名;
CREATE SEQUENCE SEQ_TEST
INCREMENT BY 1
START WITH 1
MINVALUE 1 NOMAXVALUE
NOCYCLE;
DROP SEQUENCE SEQ_TEST;
3:序列使用
CURRVAL: 返回序列的當(dāng)前值。
NEXTVAL: 序列遞增,返回下一值。
你不能使用序列的CURRVAL和NEXTVAL,在下面情況下(具體參見官方文檔):
1:在DELETE、SELECT、UPDATE的子查詢中
2:在視圖或物化事物的查詢中。
3:SELECT查詢中使用了DISTINCT操作符。
4:SELECT查詢中有GROUP BY或ORDER BY
4:序列查看
SELECT * FROM USER_SEQUENCES;
SELECT * FROM ALL_SEQUENCES;
SELECT * FROM DBA_SEQUENCES;
5:序列修改
不能修改序列的初始值,否則會(huì)報(bào)ORA-02283:
SQL> ALTER SEQUENCE SEQ_TEST START WITH 2;
ALTER SEQUENCE SEQ_TEST START WITH 2
ORA-02283: 無法更改啟動(dòng)序列號(hào)
SQL> ALTER SEQUENCE SEQ_TEST INCREMENT BY 2;
Sequence altered
序列是一個(gè)節(jié)省時(shí)間的對(duì)象,因?yàn)樗梢詼p少應(yīng)用程序中產(chǎn)生序列程序的代碼量。序列
號(hào)獨(dú)立于表被存儲(chǔ)和產(chǎn)生,因此,相同的序列可以被多個(gè)表使用。Oracle序列在某種程度上能夠幫助Oracle數(shù)據(jù)庫簡(jiǎn)化代碼,提高效率。本站的Oracle教程中對(duì)Oracle的知識(shí)點(diǎn)總結(jié)的很詳細(xì),想學(xué)習(xí)的小伙伴千萬不要錯(cuò)過啊。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)