oracle 序列
序列(SEQUENCE)是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以透過查詢檢查當前值,或使序列增至下一個值。
建立序列需要CREATE SEQUENCE系統許可權。序列的建立語法如下:
Sql程式碼
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{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表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。
刪除序列的語法是:
Sql程式碼
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;
執行結果:
Sql程式碼
NEXTVAL
------------------
10
NEXTVAL
------------------
10
步驟2:產生序列的下一個值:
SELECT ABC.NEXTVAL FROM DUAL;
執行結果:
Sql程式碼
NEXTVAL
-------------------
11
NEXTVAL
-------------------
11
產生序列的當前值:
SELECT ABC.CURRVAL FROM DUAL;
執行結果:
Sql程式碼
CURRVAL
--------------------
11
CURRVAL
--------------------
11
說明:第一次呼叫NEXTVAL產生序列的初始值,根據定義知道初始值為10。第二次呼叫產生11,因為序列的步長為1。呼叫CURRVAL,顯示當前值11,不產生新值。Oracle的解析函式為檢查間隙提供了一種要快捷得多的方法。它們使你在使用完整的、面向集合的SQL處理的同時,仍然能夠看到下一個行(LEAD)或者前一行(LAG)的數值。
檢視序列
同過資料字典USER_OBJECTS可以檢視使用者擁有的序列。
透過資料字典USER_SEQUENCES可以檢視序列的設定。
例:檢視使用者的序列:
Sql程式碼
SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM USER_SEQUENCES;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-668885/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle序列Oracle
- Oracle - Sequence序列Oracle
- Oracle序列sequenceOracle
- oracle之序列Oracle
- Oracle OCP(23):序列Oracle
- Oracle之Sequence(序列)Oracle
- oracle 序列 詳解Oracle
- oracle 序列詳解Oracle
- 0705_oracle 序列Oracle
- Oracle 建立序列語句Oracle
- Oracle建立和使用序列Oracle
- oracle 序列的建立與使用Oracle
- Oracle RAC序列效能測試Oracle
- oracle 修改序列起始值Oracle
- oracle下批量增加序列值Oracle
- Oracle序列使用:建立、刪除Oracle
- oracle主鍵序列的建立,刪除,修改序列起始值Oracle
- Oracle資料庫開發——序列Oracle資料庫
- 解決Oracle序列跳號問題Oracle
- Oracle 產生序列的 6 種方法Oracle
- Oracle重置序列(不刪除重建方式)Oracle
- oracle開發中序列的使用(轉)Oracle
- 簡單介紹oracle重置序列的方法Oracle
- oracle序列達到了最大值處理Oracle
- Oracle並行操作——從序列到並行Oracle並行
- 通用mapper用oracle序列作為主鍵APPOracle
- oracle資料庫建立Squence序列並查詢Oracle資料庫
- oracle為資料庫每張表建立序列Oracle資料庫
- oracle 序列值導致的主鍵衝突問題Oracle
- 【時間序列分析】01. 時間序列·平穩序列
- Oracle實現自增列(序列+觸發器實現、Identity Columns新特性、序列作為預設值)Oracle觸發器IDE
- 物件序列化(序列化)物件
- Java序列化、反序列化、反序列化漏洞Java
- Oracle基礎 12 物件 objects 同義詞/序列/試圖/索引Oracle物件Object索引
- 為Oracle資料庫表建立自動增長序列及Oracle的常見操作Oracle資料庫
- 序列化與反序列化
- 序列 DP
- Prufer序列