--首先建一个表TEST
create
table
TEST
(
NID
int
PRIMARY
KEY
,
test1 varchar2(20),
test2 varchar2(20),
test3 varchar2(20),
test4 varchar2(20),
test5 varchar2(20)
)
|
-- 再建一个序列SEQ_TEST
create
sequence
SEQ_TEST
minvalue 1
--最小值
nomaxvalue
--不设置最大值
start
with
1
--从1开始计数
increment
by
1
--每次加1个
nocycle
--一直累加,不循环
nocache;
--不建缓冲区
|
以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓,建议用cache,因为时间就是金钱呀!) 你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:
CREATE
OR
REPLACE
TRIGGER
tg_test
BEFORE
INSERT
ON
test
FOR
EACH ROW
WHEN
(new.nid
is
null
)
begin
select
seq_test.nextval
into
:new.nid
from
dual;
end
;
下面是测试
select
*
from
test
insert
into
test(nid,test1)
values
(6,
'aaa'
)
insert
into
test(test1)
values
(
'bbb'
)
重置的方法有以下几种:
-------------------------------------------------------------------------------------------------------------------------------------------
Oracle 序列(Sequence)主要用于生成流水号,Oracle EBS系统中是经常用到的。但是,有时需要修改序列初始值(START WITH)时,好多人凭感觉认为:Alter Sequence SequenceName Start With N。事实上,在Oracle Db中,修改序列没有这样的语法。没有这样的语法情况怎么办,有二种方法可以完成
1.先删除序列,然后重新创建。不过这不是当前要讲的重点。这个方法比较方便。
2.通过Increment By来实现修改初始值。
例如:若序列名称是SeqTest2010_S,初始值是13,而现在要设置初始值为1020,Increment By值为:1007(1020-13)
2.1 执行:Alter Sequence SeqTest2010_S Increment By 1007;
2.2 执行:Select SeqTest2010_S.NextVal From Dual;
2.3 执行:Alter Sequence SeqTest2010_S Increment By 1;
修改完成。简单吧
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果直接drop掉,与这个sequence相关的function trigger什么的在下次运行的时候都会重新编译,而且编译有可能会失败,所以采用了下边的方法:
假设sequence seq属性如下:
increment 1
minvalue 1
则用下边方法:
alter sequence seq minvalue 0;
select seq.nextval from dual; --假设值是30
alter sequence seq increment -30;
select seq.nextval from dual; --会得到0
alter sequence seq minvalue 1;
alter sequence seq increment 1;
这样之后再取的时候就会从1开始了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
有一Oracle Sequence如下:
如需重置该Sequence,让nextVal返回的是最原始的值可以使用如下方法: