您的位置:首页 > 数据库 > Oracle

Oracle中如何实现自增字段

2011-03-20 20:23 148 查看
ORACLE一般的做法是同时使用序列和触发器来生成一个自增字段。在ORACLE中sequence就是所谓的序列号,每次取得时候它会自动增

加,一般用在需要按序列号排序的地方。
1、CreateSequence
你首先要有createsequence或者createanysequence权限,

Java代码







CREATESEQUENCEemp_sequence

incrementby1--每次加几个

startwith1--从1开始计数

NOMAXvalue--不设置最大值(maxvalue99999999)

nocycle--一直累加,不循环

cache10;--设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,

也可以设置为---------NOCACHE

针对S_Test创建的sequence如下:

Java代码







createsequenceS_Test

minvalue1

maxvalue99999999

startwith1

incrementby1

nocache;


一旦定义了S_Test,你就可以用currval,nextval
currval=返回sequence的当前值
nextval=增加sequence的值,然后返回sequence值
比如:
S_Test.CURRVAL
S_Test.NEXTVAL

可以使用sequence的地方:
-不包含子查询、snapshot、view的select语句
-INSERT语句的子查询中
-NSERT语句的values中
-UPDATE的set中

可以看如下例子:

Java代码







insertintoS_Test(id,name,order)values(S_Test.Nextval,'wang',100);


2、修改序列(AlterSequence)
你或者是该sequence的owner,或者有ALTERANYSEQUENCE权限才能改动sequence.可以修改(alter)除start至以外的所有sequence参数.如果想要改变start值,必须删除序列(dropsequence),再重新创建(re-create).

Java代码







Altersequence的例子

ALTERSEQUENCEemp_sequence

INCREMENTBY10

MAXvalue10000

CYCLE--到10000后从头开始

NOCACHE;


影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES=设置能同时被cache的sequence数目。

3、删除序列
简单的DropSequence

Java代码



Java代码







dropsequenceS_Test;


下面是一个简单例子:

Java代码







createsequenceSEQ_ID

minvalue1

maxvalue99999999

startwith1

incrementby1

nocache

order;


建立解发器代码为:

Java代码







createorreplacetriggertri_test_id--触发器名称

beforeinsertonTest--Test是表名

foreachrow

declare

nextidnumber;

begin

IF:new.idISNULLor:new.id=0THEN--id是列名

selectSEQ_ID.nextval--S_Test正是刚才创建的序列

intonextid

fromsys.dual;

:new.id:=nextid;

endif;

endtri_test_id;

上面的代码就可以实现id自动递增的功能了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: