oracle 实现插入自增列(类似SqlServer Identity)

oracle不像sql 
server 有关键字identity直接可插入数据时自增 ,Oracle是不能用Identity,可以使用Sequence

Create Table Tempinfo(
       ids int not null,
       names nvarchar2(50),
       sex varchar(10)
)

insert into Tempinfo (ids,names,sex) values (1,'Serein',2188);
insert into Tempinfo (ids,names,sex) values (2,'James',2182);

select * from Tempinfo

--drop table Tempinfo

实现oracle 自增列第一步,创建一个sequence

CREATE SEQUENCE Tempinfo_seq 

 INCREMENT BY 1 -- 每次加几个 

 START WITH 1 -- 从1开始计数 

 NOMAXvalue -- 不设置最大值 

 NOCYCLE -- 一直累加,不循环  

 CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

一旦定义了Tempinfo_seq,你就可以用currval,nextval
    currval=返回 sequence的当前值
    nextval=增加sequence的值,然后返回 sequence 值

比如:
    Tempinfo_seq.CURRVAL
    Tempinfo_seq.NEXTVAL

第二步,创建一个触发器。

create or 
replace trigger userlogin_trigger
before insert on Tempinfo
for each 
row
begin
      select  Tempinfo_seq.Nextval    into:new.ids from sys.dual 
;
end;

执行插入查看

insert into  Tempinfo (names,sex) values ('Terry',2189);

 当然也事不用创建触发器,直接在插入数据时使用sequence就可以了

insert into Tempinfo (ids,names,sex) values (Tempinfo_seq.Nextval,'Serein',2188);

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

 

删除序列
    简单的Drop Sequence
    Sql代码

  drop sequence Tempinfo_seq;

 

 

参考:  oracle 实现插入自增列   

        Oracle 使用序列创建自增字段

posted @ 2016-10-09 19:33  Twang  阅读(2857)  评论(0编辑  收藏  举报