s.nextval 不要直接放insert into里面
成都創(chuàng)新互聯(lián)公司-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機房租用、聯(lián)通服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),來電聯(lián)系:028-86922220
select s.nextval into l_seq from dual;
insert into table(seq) values(l_seq);
批量的話用數(shù)組
for i in 1 .. 10000 loop
select s.nextval into l_seq(i) from dual;
end loop;
or:
服務(wù)器端直接寫一個function,執(zhí)行insert into 返回當前插入結(jié)果插入的seq
or...方法很多很多
在oracle中sequence就是序號,每次取的時候它會自動增加。sequence與表沒有關(guān)系。
1、Create Sequence
首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權(quán)限。
創(chuàng)建語句如下:
CREATE?SEQUENCE?seqTest
INCREMENT?BY?1?--?每次加幾個
START?WITH?1?--?從1開始計數(shù)
NOMAXvalue?--?不設(shè)置最大值
NOCYCLE?--?一直累加,不循環(huán)
CACHE?10;?--設(shè)置緩存cache個序列,如果系統(tǒng)down掉了或者其它情況將會導致序列不連續(xù),也可以設(shè)置為---------NOCACHE
2、得到Sequence值
定義好sequence后,你就可以用currVal,nextVal取得值。
CurrVal:返回 sequence的當前值
NextVal:增加sequence的值,然后返回 增加后sequence值
得到值語句如下:
SELECT?Sequence名稱.CurrVal?FROM?DUAL;
如得到上邊創(chuàng)建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,否則會出錯。
select 序列名.Nextval from dual;--生成并獲得下一個序列
select 序列名.CURRVAL from dual;--如果與上述語句為同一會話,可以通過此句獲得上面生成的序列。
sequence.CURRVAL 是獲得最后一次引用sequence.NEXTVAL時返回的值。
因此在當前會話中,如果是第一次訪問某個序列,在引用 sequence.CURRVAL 之前必須先引用 sequence.NEXTVAL。
1. oracle的邏輯是,同一會話中,必須先通過NEXTVAL后,才能獲取CURRVAL值
2. 關(guān)于跳號,應(yīng)該是cache的作用
你可以在SQL窗口打出sequence名稱,右鍵- 屬性,或右鍵-查看,來查看SEQ信息
3. oracle的邏輯sequence是不會rollback的,如果想要改變start值(或當前值),必須 drop sequence 再 re-create .
給你個說明:
CREATE SEQUENCE test_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數(shù)
NOMAXVALUE -- 不設(shè)置最大值
NOCYCLE -- 一直累加,不循環(huán)
CACHE 10;
一旦定義了test_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的當前值(第一查詢時會報未初始化,調(diào)用一次NEXTVAL后可用)
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
test_sequence.CURRVAL
test_sequence.NEXTVAL
可以使用sequence的地方:
- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- NSERT語句的VALUES中
- UPDATE 的 SET中