ORACLE中 SEQUENCE自動增長 用法

2021-08-04 09:19:16 字數 2810 閱讀 2614

在oracle中sequence就是序號,每次取的時候它會自動增加。sequence與表沒有關係。 

1、create sequence

首先要有create sequence或者create any sequence許可權。

建立語句如下: 

create

sequence seqtest

increment 

by1

--每次加幾個

start 

with

1

--從1開始計數

nomaxvalue 

--不設定最大值

nocycle 

--一直累加,不迴圈

cache 

10

; --設定快取cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設定為---------nocache

2、得到sequence值 

定義好sequence後,你就可以用currval,nextval取得值。

currval:返回 sequence的當前值 

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

得到值語句如下:

select

sequence名稱.currval 

from

dual; 

如得到上邊建立sequence值的語句為:

select

seqtest.currval 

from

dual

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

- 不包含子查詢、snapshot、view的 select 語句 

- insert語句的子查詢中 

- insert語句的values中 

- update 的 set中

如在插入語句中

insert

into

表名(id,name)

values

(seqtest.nextval,

'sequence 插入測試');

注:- 第一次nextval返回的是初始值;隨後的nextval會自動增加你定義的increment by值,然後返回增加後的值。

currval 總是返回當前sequence的值,但是在第一次nextval初始化之後才能使用currval,否則會出錯。

一次nextval會增加一次 sequence的值,所以如果你在同乙個語句裡面使用多個nextval,其值就是不一樣的。

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

3、alter sequence 

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

例:alter

sequence seqtest maxvalue 

9999999;

另: sequence_cache_entries引數,設定能同時被cache的sequence數目。

4、drop sequence

drop

sequence seqtest; 

5、乙個例子

create

sequence seq_id

minvalue 

1

maxvalue 

99999999

start 

with

1

increment 

by1

nocache

order

;建解髮器**為:

create

orreplace

trigger

tri_test_id

before 

insert

ons_depart   

--s_depart 是表名

foreach row

declare

nextid 

number

;begin

if:new.departid 

isnullor :new.departid

=0

then

--departid是列名

select

seq_id.nextval 

--seq_id正是剛才建立的

into

nextid

from

sys.dual;

:new.departid:

=nextid;

endif

;end

tri_test_id;

ok,上面的**就可以實現自動遞增的功能了。

注::new 代表 資料改變後的新值,相對應的有 :old 原值

:= 代表 賦值

:nextid表示引用sqlplus中定義的變數 

Oracle 中的Sequence介紹

select empseq.currval from dual altersequence user.sequence name increment by n maxvalue n nomaxvalue minvalue n nominvalue 修改序列可以 修改未來序列值的增量。設定或撤消最小值...

Oracle中Sequence的使用

有用沒用轉乙個,省著用的時候總要查。oracle提供了sequence物件,由系統提供自增長的序列號,通常用於生成資料庫資料記錄的自增長主鍵或序號的地方.下面介紹一下關於sequence 的生成,修改,刪除等常用的操作 1.建立sequence 使用如下命令新建sequence 使用者需要有crea...

oracle中的序列 sequence

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方,保證不會重複 執行緒同步 1 create sequence 首先要有create sequence許可權,create sequence sequence increment by n 每次...