日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Oracle中实现自增加ID的功能

發布時間:2025/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Oracle中实现自增加ID的功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們經常在設計數據庫的時候用一個系統自動分配的ID來作為我們的主鍵,在SQL SERVER 中有系統自帶的ID自增功能,但是在ORACLE中沒有這樣的功能,我們可以通過采取以下方法實現自動增加ID的功能


在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。
1、CreateSequence
你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE權限,
CREATESEQUENCEemp_sequence
INCREMENTBY1--每次加幾個
STARTWITH1--從1開始計數
NOMAXVALUE--不設置最大值
NOCYCLE--一直累加,不循環
CACHE10;

一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回sequence的當前值
NEXTVAL=增加sequence的值,然后返回sequence值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
-不包含子查詢、snapshot、VIEW的SELECT語句
-INSERT語句的子查詢中
-NSERT語句的VALUES中
-UPDATE的SET中

可以看如下例子:
INSERTINTOempVALUES
(empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);

SELECTempseq.currvalFROMDUAL;

但是要注意的是:
-第一次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防止這種情況。

2、AlterSequence
你或者是該sequence的owner,或者有ALTERANYSEQUENCE權限才能改動sequence.可以alter除start至以外的所有sequence參數.如果想要改變start值,必須dropsequence再re-create.
Altersequence的例子
ALTERSEQUENCEemp_sequence
INCREMENTBY10
MAXVALUE10000
CYCLE--到10000后從頭開始
NOCACHE;


影響Sequence的初始化參數:
SEQUENCE_CACHE_ENTRIES=設置能同時被cache的sequence數目。

可以很簡單的DropSequence
DROPSEQUENCEorder_seq;


好吧,就到這里。


-------------------------------------------------------------
自增長及觸發器:

如何在Oracle中實現類似自動增加ID的功能?
整理編輯:ChinaASP

我們經常在設計數據庫的時候用一個系統自動分配的ID來作為我們的主鍵,但是在ORACLE中沒有這樣的

功能,我們可以通過采取以下的功能實現自動增加ID的功能
1.首先創建sequence
createsequenceseqmaxincrementby1
2.使用方法
selectseqmax.nextvalIDfromdual
就得到了一個ID
如果把這個語句放在觸發器中,就可以實現和mssql的自動增加ID相同的功能!


-------------------------------------------------------------------------

由macro發布于:2001-04-1314:44


作者:MacroZeng



###建表###

CREATETABLE"SPORTS"."LINEUP"("ID"NUMBERNOTNULL,"TYPE"
NUMBER(3)NOTNULL,"BODY"VARCHAR2(100)NOTNULL,"HITS"NUMBER(
10)DEFAULT0NOTNULL,PRIMARYKEY("ID"))
TABLESPACE"TS_SPORTS"

###建序列###

CREATESEQUENCE"SPORTS"."SPORTS_LINEUP_ID_SEQ"INCREMENTBY1
STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLE
CACHE50NOORDER

###建自動更新的觸發器###

CREATEORREPLACETRIGGER"SPORTS"."SPORTS_LINEUP_ID_TRIGGER"
BEFOREINSERT
ON"SPORTS"."LINEUP"
FOREACHROW
DECLARE
next_idNUMBER;
BEGIN
--Getthenextidnumberfromthesequence
SELECTsports_lineup_id_seq.NEXTVAL
INTOnext_id
FROMdual;

--Usethesequencenumberastheprimarykey
--fortherecordbeinginserted.
:new.id:=next_id;
END;

###建保護PRIMARYKEY的觸發器###

CREATEORREPLACETRIGGER"SPORTS"."LINEUP_ID_UPDATE_TRIGGER"
BEFOREUPDATEOF"ID"ON"SPORTS"."LINEUP"
FOREACHROW
BEGIN
RAISE_APPLICATION_ERROR(-20000,
'sports_lineup_id_update_trigger:UpdatesoftheIDfield'
||'arenotallowed.');
END;

轉載于:https://www.cnblogs.com/linpengfeixgu/articles/1595710.html

總結

以上是生活随笔為你收集整理的在Oracle中实现自增加ID的功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。