Oracle資料庫中序列(SEQUENCE)的用法詳解

來源:互聯網
上載者:User

標籤:應該   引用   這一   改善   star   currval   自動   any   系統   

在Oracle資料庫中,序列的用途是產生表的主索引值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下一個值。本文我們主要介紹了序列的用法,希望能夠對您有所協助。

AD:

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)的數值。

Oracle資料庫中序列(SEQUENCE)的用法詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.