序列(sequence)是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下乙個值。
建立序列需要create sequence系統許可權。序列的建立語法如下:
[quote]
create sequence 序列名
[increment by n]
[start with n]
;[/quote]
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:建立序列:
[quote]
sql> create sequence abc increment
2 by 1
3 start with 10
4 maxvalue 13
5 nocycle
6 nocache;
序列已建立。
[/quote]
步驟2:刪除序列:
[quote]
sql> drop sequence abc;
序列已刪除。
[/quote]
說明:以上建立的序列名為abc,是遞增序列,增量為1,初始值為10。該序列不迴圈,不使用記憶體。沒有定義最小值,預設最小值為1,最大值為13。
序列的使用
如果已經建立了序列,怎樣才能引用序列呢?方法是使用currval和nextval來引用序列的值。
在編號的過程中,產生間隙的原因多種多樣。如果乙個儲存過程從乙個序列中挑選某個數字,定為本地變數,但是從來不用它,這個數字就丟失了。它將不能再返回到原序列中,結果就造成數值串行中存在乙個間隙。關係型資料庫模型中不必擔心這一點。但是有時候人們在意這一點,這些人想知道是哪些數字丟失了。
呼叫nextval將生成序列中的下乙個序列號,呼叫時要指出序列名,即用以下方式呼叫:
序列名.nextval
currval用於產生序列的當前值,無論呼叫多少次都不會產生序列的下乙個值。如果序列還沒有通過呼叫nextval產生過序列的下乙個值,先引用currval沒有意義。呼叫currval的方法同上,要指出序列名,即用以下方式呼叫:
序列名.currval.
產生序列的值。
步驟1:產生序列的第乙個值:
[quote]
sql> select abc.nextval from dual;
nextval
----------
10[/quote]
[quote]
sql> /
nextval
----------
11[/quote]
產生序列的當前值:
[quote]
sql> select abc.currval from dual;
currval
----------
12[/quote]
檢視序列
同過資料字典user_objects可以檢視使用者擁有的序列。
通過資料字典user_sequences可以檢視序列的設定。
例:檢視使用者的序列:
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences;
Oracle資料庫第二講
在select語句中使用where子句對查詢結果加以限制 只返回符合限定條件的記錄 select from emp where deptno 10 檢索10號部門的所有雇員 select語法擴充 select distinct 表名 表示式 表名 欄位名 as 別名 from 表名 別名 where...
Oracle資料庫精講(三)
內連線 多張表通過相同字段進行匹配,只顯示匹配成功的資料。1.select from emp e,dept d where e.deptno d.deptno 2.select from emp e inner join dept d on e.deptno d.deptno 外連線 以左表為基準 ...
ORACLE資料庫中ROWNUM用法詳解
oracle 中rownum用法總結 對於 oracle 的 rownum 問題,between.and,只能用以上符號 假設某個表 t1 c1 有 20 條記錄 如果用select rownum,c1 from t1 where rownum 10,只要是用小於號,查出來的結果很容易地與一般理解在...