ORACLE PL/SQL 中序列(sequence)的簡易使用方法介紹

來源:互聯網
上載者:User

標籤:ref   stat   緩衝   使用   而且   lan   currval   ext   acl   

如果我是C羅 原文 ORACLE PL/SQL 中序列(sequence)的簡易使用方法介紹 

sequence在ORACLE中應用十分廣泛,就是序號的意思,會自動增加指定變數,如逐次增加1或者2或者其他.


1.建立序列 Create Sequence

你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 許可權

CREATE SEQUENCE CUX_DEMO_SEQUENCE
MINVALUE 1
MAXVALUE 99999999999
START WITH 10000
INCREMENT BY 1
NOCYCLE
CACHE 20
ORDER ;

注釋:

MINVALUE 1   --最小值
MAXVALUE 99999999999   --最大值
START WITH 10000   --起始數值
INCREMENT BY 1   --每次增加1
NOCYCLE    --一直累加不迴圈
CACHE 20 --緩衝
ORDER ;

還有一些其他參數,比如:

NOMAXVALUE   --無最大值
NOCACHE --不設定緩衝

如果指定CACHE值,ORACLE就可以預先在記憶體裡面放置一些sequence,這樣存取的快些。cache裡面的取完後,oracle自動再取一組到cache。使用cache或許會跳號, 比如資料庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失. 所以可以在create sequence的時候用nocache防止這種情況。


2.使用序列

定義好SEQUENCE,你就可以用CURRVAL,NEXTVAL

CURRVAL=返回 SEQUENCE的當前值

NEXTVAL=增加SEQUENCE的值,然後返回 SEQUENCE 值

EXAMPLE:

CUX_DEMO_SEQUENCE.CURRVAL
CUX_DEMO_SEQUENCE.NEXTVAL

可以使用SEQUENCE的地方:

- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- NSERT語句的VALUES中
- UPDATE 的 SET中

可以看如下例子:

INSERT INTO CUX_DEMO_TABLE VALUES
(CUX_DEMO_SEQUENCE.NEXTVAL, 123 , ‘IBAD‘ , ‘MARK‘ ,‘Y‘);

SELECT CUX_DEMO_SEQUENCE.CURRVAL FROM DUAL;

注意:

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


3. 修改序列 ALTER SEQUENCE

你或者是該SEQUENCE的owner,或者有ALTER ANY SEQUENCE 許可權才能改動SEQUENCE. 可以alter除start至以外的所有SEQUENCE參數.如果想要改變start值,必須 DROP SEQUENCE 再 重新建立SEQUENCE .

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


影響SEQUENCE的初始化參數:

SEQUENCE_CACHE_ENTRIES =設定能同時被cache的SEQUENCE數目。

4.刪除序列 DROP SEQUENCE

可以很簡單的Drop SEQUENCE

DROP SEQUENCE CUX_DEMO_SEQUENCE;

11g中對PL/SQL訪問sequence的一個改進

5.在pl/sql 代碼中訪問一個sequence

在Oracle 11g之前,熟悉pl/sql編程的puber們都知道,當在pl/sql 代碼中訪問一個sequence的時候,一般的做法是,比如:
DECLARE v_n  number;
BEGIN
   SELECT Seq.Nextval INTO v_n FROM Dual;
   ....
END;

所以大家都覺得很煩瑣,而且這麼寫有一定的效能上的開銷,但是沒辦法,那麼好了,到了11g,這個問題Oracle開發人員為你排憂了。

在11g中,重新修改了存取方法,不僅僅提高了運行效率而且在pl/sql中的調用方法也變的非常簡單,在11g中,你可以簡單的這樣處理:
DECLARE v_n NUMBER:=Seq.Nextval;
BEGIN
   ....
END;

 

ORACLE PL/SQL 中序列(sequence)的簡易使用方法介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.