update amldata.tmp_out_client t set
t.client_id = amldata.seq_client_id.nextval;
amldata.seq_client_id.nextval;
-- create sequence
create sequence amldata.seq_client_id
minvalue 1
maxvalue 9999999999999
start
with
2741
increment by
1cache 20
;
在oracle中sequence就是序號,每次取的時候它會自動增加。sequence與表沒有關係。
首先要有create sequence或者create any sequence許可權。
建立語句如下:
create sequence seqtest
increment by
1-- 每次加幾個
start
with
1-- 從1開始計數
nomaxvalue -- 不設定最大值
nocycle -- 一直累加,不迴圈
cache 10
;--設定快取cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設定為---------nocache
定義好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防止這種情況。
擁有alter any sequence 許可權才能改動sequence. 可以alter除start至以外的所有sequence引數.如果想要改變start值,必須 drop sequence 再 re-create。
例:
alter sequence seqtest maxvalue 9999999
;
另: sequence_cache_entries引數,設定能同時被cache的sequence數目。
drop sequence seqtest;
oracle中的ID號如何實現自增長
利用序列產生主鍵值。序列 sequence 是一種可以被多個使用者使用的用於產生一系列唯一數字的資料庫物件。序列定義儲存在資料字典中,通過提供唯一數值的順序表來簡化程式設計工作,可以使用序列自動產生主鍵的鍵值。當乙個序列第一次被查詢呼叫時,它將返回乙個預定值。在隨後的每次查詢中,序列將產生乙個按指定...
oracle中的ID號實現自增長的方法
利用序列產生主鍵值。序列 sequence 是一種可以被多個使用者使用的用於產生一系列唯一數字的資料庫物件。序列定義儲存在資料字典中,通過提供唯一數值的順序表來簡化程式設計工作,可以使用序列自動產生主鍵的鍵值。當乙個序列第一次被查詢呼叫時,它將返回乙個預定值。在隨後的每次查詢中,序列將產生乙個按指定...
Oracle中實現自增列
oracle中新增自增列 觸犯器和序列實現 create orreplace trigger 觸發器名 before insert on his mz sfmx foreach row declare last sequence number last insertid number begin i...