六 Oracle之序列

2021-08-19 10:29:56 字數 2533 閱讀 8752

ad:

在oracle資料庫中,什麼是序列呢?它的用途是什麼?序列(sequence)其實是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下乙個值。

建立序列需要create sequence系統許可權。序列的建立語法如下:

create sequence 序列名

[increment by n] ;

1)increment by用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表序列的值是按照此步長遞減的。

2)start with定義序列的初始值(即產生的第乙個值),預設為1。

3)maxvalue定義序列生成器能產生的最大值。選項nomaxvalue是預設選項,代表沒有最大值定義,這時對於遞增序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。

minvalue定義序列生成器能產生的最小值。選項nomaxvalue是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。

cycle和nocycle表示當序列生成器的值達到限制值後是否迴圈。cycle代表迴圈,nocycle代表不迴圈。

如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。

如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。

cache(緩衝)定義存放序列的記憶體塊的大小,預設為20。nocache表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。

drop sequence 序列名;

其中:1)刪除序列的人應該是序列的建立者或擁有drop any sequence系統許可權的使用者。序列一旦刪除就不能被引用了。

2)序列的某些部分也可以在使用中進行修改,但不能修改satrt with選項。

3)對序列的修改只影響隨後產生的序號,已經產生的序號不變。

建立和刪除序列

例1:建立序列:

create sequence abc

increment by 1

maxvalue 9999999

nocycle nocache;

執行結果:

序列已建立。

步驟2:刪除序列:

drop sequence abc;

執行結果:

序列已丟棄。

說明:以上建立的序列名為abc,是遞增序列,增量為1,初始值為10。該序列不迴圈,不使用記憶體。沒有定義最小值,預設最小值為1,最大值為9 999 999。

如果已經建立了序列,怎樣才能引用序列呢?方法是使用currvalnextval來引用序列的值。

序列的間隙

在編號的過程中,產生間隙的原因多種多樣。如果乙個儲存過程從乙個序列中挑選某個數字,定為本地變數,但是從來不用它,這個數字就丟失了。它將不能再返回到原序列中,結果就造成數值串行中存在乙個間隙。關係型資料庫模型中不必擔心這一點。但是有時候人們在意這一點,這些人想知道是哪些數字丟失了。

1)呼叫nextval將生成序列中的下乙個序列號,呼叫時要指出序列名,即用以下方式呼叫:

序列名.nextval

注意:在同乙個sql語句中多次使用nextval只會生成乙個值,也就是同乙個sql中nextval使用的是同乙個值

2)currval用於產生序列的當前值,無論呼叫多少次都不會產生序列的下乙個值。如果序列還沒有通過呼叫nextval產生過序列的下乙個值,先引用currval沒有意義。呼叫currval的方法同上,要指出序列名,即用以下方式呼叫:

序列名.currval.

產生序列的值。

步驟1:產生序列的第乙個值:

select abc.nextval from dual;

執行結果:

nextval —————— 10

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系列之序列

涉及到表的處理請參看原表結構與資料 oracle建表插資料等等 create sequence sequence name start with numincrement byincrement maxvalue num nomaxvalue minvalue num nominvalue cycl...

python之序列結構 字典(六)

字典是包含若干鍵值對額無序可變序列,每個元素包含了用冒號分隔開的鍵和值兩部分,表示一種對映或對應關係,定義時不同元素用逗號分隔,所有元素放在一對大括號 中 要注意的是字典中鍵是python中任意不可變的資料,即整數,實數,複數等,但不能使用列表,集合,字典或其它可變型別作為字典的鍵,鍵也不可重複,值...

Oracle資料庫之序列

序列是乙個計數器,它並不會與特定的表關聯。我們可以通過建立oracle序列和觸發器實現表的主鍵自增。序列的用途一般用來填充主鍵和計數。一 建立序列 語法結構 create sequence schema.sequence name integer 完整語法結構見 說明 schema 模式,即使用者名...