Oracle Sequence創建與使用

Oracle Sequence創建與使用

一.Sequence簡介

  Sequence是數據庫系統按照一定的規則自動增加的數字序列,主要用於生成數據庫數據記錄。這個序列一般作爲代理主鍵(因爲不會重複)。

    Sequence是數據中一個特殊存放等差數列的表,該表受數據庫系統控制,任何時候數據庫系統都可以根據當前記錄數大小加上步長來獲取到該表下一條記錄應該是多少,這個表沒有實際意義,常常用來做主鍵用。Sequence是數據庫系統的特性,有的數據庫有Sequence,有的沒有。比如Oracle、DB2、PostgreSQL數據庫有Sequence,MySQL、SQL Server、Sybase等數據庫則沒有Sequence。

  此處,主要討論下oracle sequence的創建與使用,其他的大同小異。

二.Sequence創建

  Create Sequence之前要獲取CREATE SEQUENCE或者CREATE ANY SEQUENCE權限。

1 -- Create sequence 
2 create sequence SEQ_PRODUCT_STANDARD_CHG  --Sequence實例名
3 minvalue 1                                --最小值,可以設置爲0
4 maxvalue 2147483647                       --最大值
5 start with 1                              --從1開始計數
6 increment by 1                            --每次加幾個
7 cache 20;                                 --設置緩存cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置爲---------NOCACHE

  或者可以如下創建均是可以的

1 CREATE SEQUENCE SEQ_PRODUCT_STANDARD_CHG
2 START WITH 1                          -- 從1開始計數
3 NOMAXvalue                            -- 不設置最大值
4 INCREMENT BY 1                        -- 每次加幾個
5 NOCYCLE                               -- 一直累加,不循環
6 CACHE 10;                             --設置緩存cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置爲---------NOCACHE

三. Sequence使用

  創建好Sequence後就可以通過currVal與nextVal進行使用。

    currVal:返回 sequence的當前值 

    nextVal:  增加sequence的值,然後返回 增加後sequence值

      如得到上邊創建Sequence值的語句爲(其中kingstar爲用戶,該用戶下其實可以省略):

            1 select kingstar.SEQ_PRODUCT_STANDARD_CHG.currVal 2 from dual 

      

  在Sql語句中可以使用sequence的地方:   

      1. 不包含子查詢、snapshot、VIEW的 SELECT 語句      
      2. INSERT語句的子查詢中        
      3. INSERT語句的values中              
      4. UPDATE 的 SET中

  注:1.CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。

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

四.Sequence 修改

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

   1 alter sequence kingstar.SEQ_PRODUCT_STANDARD_CHG  maxvalue 9999999;   

1 ALTER SEQUENCE kingstar.SEQ_PRODUCT_STANDARD_CHG
2 INCREMENT BY 10
3 MAXVALUE 10000
4 CYCLE — 到10000後從頭開始
5 NOCACHE ;

五. Sequence刪除

   1 DROP SEQUENCE kingstar.SEQ_PRODUCT_STANDARD_CHG; 

  

posted @ 2016-10-19 11:25 Ziyuan.Zhu 閱讀(...) 評論(...) 編輯 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章