但是要注意的是:第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL总是返回当前sequence的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
------------------------一个例子-----------------------
create sequence for_test --序列名
increment by 1 --每次增加1
start with 1 --从1开始
nomaxvalue --没有最大值
nocache --没有缓存序列
----------------------------创建测试表------------------
create table Test
(
TestID int primary key,
TestName varchar2(20) not null,
Tdescription varchar2(200) null
)
-----------------------------使用序列-------------------
insert into Test
values(for_test.nextval,'序列测试','这是一个序列使用的例子')
--------------------序列使用结果查询-----------------
select * from test
触发器
1
CREATE or replace TRIGGER "触发器名称" BEFORE
INSERT ON Test FOR EACH ROW WHEN (new.TestID is null)
begin
select for_test.nextval into: new.TestID from dual; //for_test 序列名
end;
INSERT INTO Test (TestName,Tdescription ) Values('Cao','Heibei');
删除触发器 drop trigger 触发器名称 2
create or replace trigger trigger_name
before insert on your_sid.tablename
for each row
begin
declare
i number;
cursor cur is select max(id) from your_sid.tablename;
BEGIN
open cur;
FETCH cur INTO i;
if i is NULL then
:new.id := 0; //可以根据实际需要来定初始值
else
:new.id := i + 1; //这里以1递增
end if;
Close cur;
END;
END;
/
其中:your_sid为数据库的当前用户SID,tablename为表名,id为列名