程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> [Oracle] Sequence 簡介

[Oracle] Sequence 簡介

編輯:Oracle數據庫基礎

Oracle提供了sequence對象,由系統提供自增長的序列號,通常用於生成數據庫數據記錄的自增長主鍵或序號的地方.

下面介紹一下關於sequence 的生成,修改,刪除等常用的操作:


1. 創建 Sequence

使用如下命令新建sequence(用戶需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE權限):

CREATE  SEQUENCE test_sequence
 INCREMENT  BY   1    --  每次加的個數據 
 START  WITH   1     --  從1開始計數 
 NOMAXVALUE      --  不設置最大值 
 NOCYCLE        --  一直累加,不循環 
 CACHE  10 ; 
 
[注意]
如果設置了CACHE值,ORACLE將在內存裡預先放置一些sequence,以使存取速度更快。cache裡面的取完後,Oracle自動再取一組到cache。 但是,使用cache可能會跳號, 當遇到數據庫突然異常down掉(shutdown abort),cache中的sequence就會丟失.
因此,推薦在create sequence的時候使用 nocache 選項。


2. 使用 sequence:

sequence.CURRVAL    -- 返回 sequence的當前值
sequence.NEXTVAL    -- 增加sequence的值,然後返回 sequence 值

[注意]
第一次NEXTVAL返回的是初始值;
隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返回增加後的值。

CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。
一次NEXTVAL會增加一次 SEQUENCE的值,所以如果你在同一個語句裡面使用多個NEXTVAL,其值就是不一樣的。


sequence 存儲在數據字典中,存儲於user_sequences表
 
LAST_NUMBER 為最終序列號,也就是sequence游標當前所在的位置。

//get sequence last_number

SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME=TEST_SEQNAME

// NEXTVAL 使游標指向下一位(增一或減一)

SELECT SEQNAME.NEXTVAL FROM USER_SEQUENCES 得到下一位游標的值


3. 修改 Sequence

用戶必須擁有ALTER ANY SEQUENCE 權限才能修改sequence. 可以alter除start至以外的所有sequence參數.
如果想要改變start值,必須 drop sequence 再 re-create.

命令格式如下:

ALTER  SEQUENCE test_sequence
 INCREMENT  BY   10 
 MAXVALUE  10000 
 CYCLE       --  到10000後從頭開始 
 NOCACHE ; 

4.  刪除 Sequence
 DROP  SEQUENCE order_seq;  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved