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开始到无限大(无限大的程度是由你机器决定的),nocycle
是决定不循环,如果你设置了最大值那么你可以用cycle
会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)
书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
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','广州');