Oracle实现自增

Oracle上没有自增字段,可以使用索引和触发器来达到此目的  
  第一步:创建SEQUENCE  
  create   sequence   s_country_id   increment   by   1   start   with   1   maxvalue   999999999;  
  第二步:创建一个基于该表的before   insert   触发器,在触发器中使用该SEQUENCE  
  create   or   replace   trigger   bef_ins_t_country_define  
  before   insert   on   t_country_define  
  referencing   old   as   old   new   as   new   for   each   row  
  begin  
  new.country_id=s_country_id.nextval;  
  end;  

 

CREATE TABLE BAB.TB_TRAN(
USERID Number(38) NOT NULL PRIMARY KEY,
USERNAME VARCHAR(50),
USERPASS VARCHAR(50),
USERPOPEDOM VARCHAR(50),
CITY VARCHAR(50));


CREATE SEQUENCE BAB.SEQ_TB_USERINFO
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocy­cle
是决定不循环,如果你设置了最大值那么你可以用cycle
会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cac­he,因为时间就是金钱呀!跑题了!)
书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:


 CREATE TRIGGER BAB.TRI_TB_USERINFO
 BEFORE INSERT ON BAB.TB_USERINFO
 FOR EACH ROW
 begin
 select BAB.SEQ_TB_USERINFO.nextval
 into :new.userid
 from dual;
 end;

 

into 和 冒号不连在一起,冒号和new连在一起,最后select语句结束有分号

INSERT INTO BAB.TB_TRAN (USERNAME,USERPASS,USERPOPEDOM,CITY)
Values('riversouth','riversouth','riversouth','广州');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值