天天看點

oracle序列 (sequence)

Mysql中主鍵有自增長的特性,而Oracle中,主鍵沒有自增長這個特性,可以使用序列解決該問題,序列主要用于生成主鍵值

CREATE SEQUENCE 序列名
[INCREMENT BY n]--自增長頻率,預設是1
[START WITH n] --定義序列的初始值(即産生的第一個值),預設為1
[{MAXVALUE n| NOMAXVALUE}] --是否指定最大值,預設不指定
[{MINVALUE n| NOMINVALUE}] --是否指定最小值,預設不指定
[{CYCLE|NOCYCLE}]--當序列生成器的值達到限制值後是否循環。CYCLE代表循環,NOCYCLE代表不循環
[{CACHE n| NOCACHE}];--為了加快序列使用效率,每次生成的值都是在緩存中讀取的,預設20,不過20不夠,oracle再生成20個放入緩存
           

建立一個最簡單的序列

oracle序列 (sequence)

ORACLE中為序列提供了兩個僞列:

1, NEXTVAL 擷取序列對象的下一個值(指針向前移動一個,并且擷取到目前的值。)

2, CURRVAL 擷取序列對象目前的值

序列使用

insert into tstudent(sno,sname,sage,ssex) values(seq_test.nextval,
'哈',33,'女')
           

結合觸發器使用

create or replace trigger testseq
  before insert
  on tstudent 
  for each row
  when(new.sno is null) --滿足此條件才使用觸發器,多個條件用and連接配接。
declare
  -- local variables here
begin
  select seq_test.nextval into :new.sno from dual;
end testseq;
           
oracle序列 (sequence)

注意

1, 序列是一個共有對象,多個表都可以調用。但實際開發中,可以避免多個表用一個序列(建立多個序列)。序列是獨立的對象。任意表都可以使用,但是編号就不能保證有序。

2,當插入記錄時報錯,序列對象值也被使用,下一次再使用時,序列的值就會+1