CREATE SEQUENCE emp_sequence -- emp_sequence這個(gè)就是后面要用到這個(gè)序列號時(shí)引用的名稱
高淳網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
INCREMENT BY 1 -- 每次加幾個(gè)
START WITH 1 -- 從1開始計(jì)數(shù)
NOMAXVALUE -- 不設(shè)置最大值
NOCYCLE -- 一直累加,不循環(huán)
CACHE 100; -- 緩存值 100
當(dāng) 需要使用該序列號的值時(shí),直接調(diào)用創(chuàng)建的序號號中的 nextval方法。
如: emp_sequence.nextval (注意:后面沒有括號,它是一個(gè)屬性值)
刪除序列
DROP SEQUENCE emp_sequence;
CREATE SEQUENCE emp_sequence --序列名
INCREMENT BY 1 -- 每次加幾個(gè)
START WITH 1 -- 從1開始計(jì)數(shù)
NOMAXVALUE -- 不設(shè)置最大值
NOCYCLE -- 一直累加,不循環(huán)
CACHE 10;
--創(chuàng)建序列的語法 --
CREATE SEQUENCE SEQ_POS_ORDER_ONLINE_ID
INCREMENT BY 1
START WITH 1000000000000042 -- 從1開始計(jì)數(shù) 或 MINVALUE 1 或 NOMINVALUE --的設(shè)置最小值 不設(shè)置最小值
NOMAXvalue -- 不設(shè)置最大值 或 MAXVALUE 10 --設(shè)置最大值 10
NOCYCLE -- 一直累加,不循環(huán) 或
CACHE 10; --設(shè)置緩存cache個(gè)序列,如果系統(tǒng)down掉了或者其它情況將會(huì)導(dǎo)致序列不連續(xù),也可以設(shè)置為---------NOCACHE
oracle的自增需要依靠序列和觸發(fā)器共同實(shí)現(xiàn)
比如
先創(chuàng)建一個(gè)表
create?table?test(id?int?primary?key,
name?varchar2(10));
創(chuàng)建一個(gè)序列
create?sequence?test_seq?
increment?by?1?
start?with?1?
minvalue?1?
maxvalue?9999999999999?
nocache?
order;
觸發(fā)器實(shí)現(xiàn)
create?or?replace?trigger?test_trigger
before?insert?on?testfor?each?row
begin?????
select??test_seq.Nextval?into:new.id?from?dual;
end;
然后你試試吧
insert?into?test?(name)?values?('張三');
在oracle中sequence就是所謂的序列號,每次取的時(shí)候它會(huì)自動(dòng)增加,一般用在需要按序列號排序的地方。
1、createsequence
你首先要有createsequence或者createanysequence權(quán)限,
createsequenceemp_sequence
incrementby1--每次加幾個(gè)
startwith1--從1開始計(jì)數(shù)
nomaxvalue--不設(shè)置最大值
nocycle--一直累加,不循環(huán)
cache10;
一旦定義了emp_sequence,你就可以用currval,nextval
currval=返回sequence的當(dāng)前值
nextval=增加sequence的值,然后返回sequence值
比如:
emp_sequence.currval
emp_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會(huì)自動(dòng)增加你定義的incrementby值,然后返回增加后的值。currval總是返回當(dāng)前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會(huì)出錯(cuò)。一次nextval會(huì)增加一次sequence的值,所以如果你在同一個(gè)語句里面使用多個(gè)nextval,其值就是不一樣的。明白?
-如果指定cache值,oracle就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動(dòng)再取一組到cache。使用cache或許會(huì)跳號,比如數(shù)據(jù)庫突然不正常down掉(shutdownabort),cache中的sequence就會(huì)丟失.所以可以在createsequence的時(shí)候用nocache防止這種情況。
2、altersequence
你或者是該sequence的owner,或者有alteranysequence權(quán)限才能改動(dòng)sequence.可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須dropsequence再re-create.
altersequence的例子
altersequenceemp_sequence
incrementby10
maxvalue10000
cycle--到10000后從頭開始
nocache;
影響sequence的初始化參數(shù):
sequence_cache_entries=設(shè)置能同時(shí)被cache的sequence數(shù)目。
可以很簡單的dropsequence
dropsequenceorder_seq;
第一步,創(chuàng)建序列
create sequence seq_style
INCREMENT BY 1 -- 每次加的個(gè)數(shù)據(jù)
START WITH 1 -- 從1開始計(jì)數(shù)
NOMAXVALUE -- 不設(shè)置最大值
NOCYCLE -- 一直累加,不循環(huán)
noCACHE;
第二步,創(chuàng)建觸發(fā)器
create or replace trigger style_insert
before insert on style
for each row
begin
select seq_style.nextval into :new.id from dual;
end;
不知道你為哪個(gè)字段創(chuàng)建自增序列,你把:new.id里的那個(gè)id換成你表里字段名,其他不用改
本文標(biāo)題:oracle怎么建立序列,oracle序列的用法
文章起源:http://m.rwnh.cn/article10/phjdgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站維護(hù)、App設(shè)計(jì)、定制開發(fā)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)