在Oracle資料庫中,序列的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查目前值,或使序列增至下一個值。本文我們主要介紹了序列的用法,希望能夠對您有所幫助。
在Oracle資料庫中,什麼是序列呢?它的用途是什麼?序列(SEQUENCE)其實是序列号生成器,可以為表中的行自動生成序列号,産生一組等間隔的數值(類型為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查目前值,或使序列增至下一個值。
建立序列需要CREATE SEQUENCE系統權限。序列的建立文法如下:
CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] [] [{CACHE n|NOCACHE}];
INCREMENT BY 用于定義序列的步長,如果省略,則預設為1,如果出現負值,則代表序列的值是按照此步長遞減的。
START WITH 定義序列的初始值(即産生的第一個值),預設為1。
MAXVALUE 定義序列生成器能産生的最大值。選項NOMAXVALUE是預設選項,代表沒有最大值定義,這時對于遞增序列,系統能夠産生的最大值是10的27次方;對于遞減序列,最大值是-1。
MINVALUE定義序列生成器能産生的最小值。選項NOMAXVALUE是預設選項,代表沒有最小值定義,這時對于遞減序列,系統能夠産生的最小值是?10的26次方;對于遞增序列,最小值是1。
CYCLE和NOCYCLE 表示當序列生成器的值達到限制值後是否循環。CYCLE代表循環,NOCYCLE代表不循環。如果循環,則當遞增序列達到最大值時,循環到最小值;對于遞減序列達到最小值時,循環到最大值。如果不循環,達到限制值後,繼續産生新值就會發生錯誤。
CACHE(緩沖)定義存放序列的記憶體塊的大小,預設為20。NOCACHE表示不對序列進行記憶體緩沖。對序列進行記憶體緩沖,可以改善序列的性能。
删除序列的文法是:
DROP SEQUENCE 序列名;
其中:
删除序列的人應該是序列的建立者或擁有DROP ANY SEQUENCE系統權限的使用者。序列一旦删除就不能被引用了。
序列的某些部分也可以在使用中進行修改,但不能修改SATRT WITH選項。對序列的修改隻影響随後産生的序号,已經産生的序号不變。
修改序列的文法如下:
建立和删除序列
例1:建立序列:
CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE;
執行結果:
序列已建立。
步驟2:删除序列:
DROP SEQUENCE ABC;
執行結果:
序列已丢棄。
說明:以上建立的序列名為ABC,是遞增序列,增量為1,初始值為10。該序列不循環,不使用記憶體。沒有定義最小值,預設最小值為1,最大值為9 999 999。
序列的使用
如果已經建立了序列,怎樣才能引用序列呢?方法是使用CURRVAL和NEXTVAL來引用序列的值。
在編号的過程中,産生間隙的原因多種多樣。如果一個存儲過程從一個序列中挑選某個數字,定為本地變量,但是從來不用它,這個數字就丢失了。它将不能再傳回到原序列中,結果就造成數值序列中存在一個間隙。關系型資料庫模型中不必擔心這一點。但是有時候人們在意這一點,這些人想知道是哪些數字丢失了。
調用NEXTVAL将生成序列中的下一個序列号,調用時要指出序列名,即用以下方式調用:
序列名.NEXTVAL
CURRVAL用于産生序列的目前值,無論調用多少次都不會産生序列的下一個值。如果序列還沒有通過調用NEXTVAL産生過序列的下一個值,先引用CURRVAL沒有意義。調用CURRVAL的方法同上,要指出序列名,即用以下方式調用:
序列名.CURRVAL.
産生序列的值。
步驟1:産生序列的第一個值:
SELECT ABC.NEXTVAL FROM DUAL;
執行結果:
NEXTVAL ------------------ 10
步驟2:産生序列的下一個值:
SELECT ABC.NEXTVAL FROM DUAL;
執行結果:
NEXTVAL ------------------- 11
産生序列的目前值:
SELECT ABC.CURRVAL FROM DUAL;
執行結果:
CURRVAL -------------------- 11
說明:第一次調用NEXTVAL産生序列的初始值,根據定義知道初始值為10。第二次調用産生11,因為序列的步長為1。調用CURRVAL,顯示目前值11,不産生新值。Oracle的解析函數為檢查間隙提供了一種要快捷得多的方法。它們使你在使用完整的、面向集合的SQL處理的同時,仍然能夠看到下一個行(LEAD)或者前一行(LAG)的數值。