在oracle中sequence就是所謂的序號,每次取的時候它會自動增加,一般用在需要按序號排序的地方。1、CreateSequence你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE許可權,CREATESEQUENCEemp_sequenceINCREMENTBY1--每次加幾個STARTWITH1--從1開始計數NOMAXVALUE--不設定最大值NOCYCLE--一直累加,不迴圈CACHE10;一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVALCURRVAL=返回sequence的當前值NEXTVAL=增加sequence的值,然後返回sequence值比如:emp_sequence.CURRVALemp_sequence.NEXTVAL可以使用sequence的地方:-不包含子查詢、snapshot、VIEW的SELECT語句-INSERT語句的子查詢中-NSERT語句的VALUES中-UPDATE的SET中可以看如下例子:INSERTINTOempVALUES(empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);SELECTempseq.currvalFROMDUAL;但是要注意的是:-第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENTBY值,然後返回增加後的值。CURRVAL總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在同一個語句裡面使用多個NEXTVAL,其值就是不一樣的。明白?-如果指定CACHE值,ORACLE就可以預先在記憶體裡面放置一些sequence,這樣存取的快些。cache裡面的取完後,oracle自動再取一組到cache。使用cache或許會跳號,比如資料庫突然不正常down掉(shutdownabort),cache中的sequence就會丟失.所以可以在createsequence的時候用nocache防止這種情況。2、AlterSequence你或者是該sequence的owner,或者有ALTERANYSEQUENCE許可權才能改動sequence.可以alter除start至以外的所有sequence參數.如果想要改變start值,必須dropsequence再re-create.Altersequence的例子ALTERSEQUENCEemp_sequenceINCREMENTBY10MAXVALUE10000CYCLE--到10000後從頭開始NOCACHE;影響Sequence的初始化參數:SEQUENCE_CACHE_ENTRIES=設定能同時被cache的sequence數目。可以很簡單的DropSequenceDROPSEQUENCEorder_seq;好吧,就到這裡。-------------------------------------------------------------自增長及觸發器:如何在Oracle中實作類別似自動增加ID的功能?整理編輯:ChinaASP我們經常在設計資料庫的時候用一個系統自動分配的ID來作為我們的主鍵,但是在ORACLE中沒有這樣的功能,我們可以通過採取以下的功能實現自動增加ID的功能1.首先建立sequencecreatesequenceseqmaxincrementby12.使用方法selectseqmax.nextvalIDfromdual就得到了一個ID如果把這個語句放在觸發器中,就可以實現和mssql的自動增加ID相同的功能!-------------------------------------------------------------------------由macro發佈於:2001-04-1314:44作者:MacroZeng###建表###CREATETABLE"SPORTS"."LINEUP"("ID"NUMBERNOTNULL,"TYPE"NUMBER(3)NOTNULL,"BODY"VARCHAR2(100)NOTNULL,"HITS"NUMBER(10)DEFAULT0NOTNULL,PRIMARYKEY("ID"))TABLESPACE"TS_SPORTS"###建序列###CREATESEQUENCE"SPORTS"."SPORTS_LINEUP_ID_SEQ"INCREMENTBY1STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLECACHE50NOORDER###建自動更新的觸發器###CREATEORREPLACETRIGGER"SPORTS"."SPORTS_LINEUP_ID_TRIGGER"BEFOREINSERTON"SPORTS"."LINEUP"FOREACHROWDECLAREnext_idNUMBER;BEGIN--GetthenextidnumberfromthesequenceSELECTsports_lineup_id_seq.NEXTVALINTOnext_idFROMdual;--Usethesequencenumberastheprimarykey--fortherecordbeinginserted.:new.id:=next_id;END;###建保護PRIMARYKEY的觸發器###CREATEORREPLACETRIGGER"SPORTS"."LINEUP_ID_UPDATE_TRIGGER"BEFOREUPDATEOF"ID"ON"SPORTS"."LINEUP"FOREACHROWBEGINRAISE_APPLICATION_ERROR(-20000,'sports_lineup_id_update_trigger:UpdatesoftheIDfield'||'arenotallowed.');END;