Oracle中没有像mysql中那样自增的方式(auto_increment),可以使用sequence+trigger的方式来实现该功能。
1、有下面一张表:
create table ecp_docfiles (id number(10) primary key , contractcode varchar2(150) ,filename varchar2(30) not null unique,createdate timestamp default sysdate,isactive char(2) default '1' );
id是主键。
2,创建一个sequence。
create sequence sequence_ecp_docfiles
increment by 1 --每次自增1
start with 1 --从1开始
nomaxvalue -- 不设置最大值
nocycle --不循环,一直累加
cache 10;
-- 为了加快读取速度,可以设置cache,既每次预加10个序列号,但如果数据库服务器宕机,就会造成cache中预加的序列号丢失,从而致使表中的序列不是连续的。
3.创建一个trigger,在对ecp_docfiles表进行insert时,就会自动的将id值自增。
create or replace trigger tigger_ecp_docfiles
before insert on ecp_docfiles
for each row
declare
nextid number;
begin
if :new.id is null or :new.id = 0 then
select sequence_ecp_docfiles.nextval
into nextid
from sys.dual;
:new.id := nextid;
end if;
end tigger_ecp_docfiles;