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自动递增的功能了。
加,一般用在需要按序列号排序的地方。
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自动递增的功能了。
相关文章推荐
- Oracle中如何实现自增字段
- Oracle中如何实现某一字段自动增加1
- Oracle如何实现多个字段去重
- Oracle中如何实现某一字段自动增加1?
- 如何实现oracle中的某个字段自动增长
- 如何实现oracle字段中字符+数字的数据------兼顾字符和数字组合排序
- Oracle如何实现多个字段去重
- C# + 微软企业库(Microsoft.Enterprise.Library),实现Oracle字段自增的应用
- Oracle如何实现从特定组合中随机读取值
- 用java和oracle实现BLOB字段的字符串读取【转】
- INFORMIX如何通过TRIGGER实现复制同一个表的一个字段到另外一个字段
- ORACLE中如何实现ASCII字符串和16进制串互相转换
- 如何在mysql中实现update字段set字段=字段+字符
- oracle如何实现插如记录时ID自增
- 如何在oracle中设置字段自动增长
- oracle 如何实现上一条、下一条、查找不连续的值(转)
- Oracle中如何获得日期类型字段最新(时间最晚)的记录
- Oracle中如何用SQL检测字段是否包括中文字符
- oracle如何修改字段?
- oracle如何最快的删除大数据量表中的多个字段