oracle设置自动增长序列

我们在使用mysql,sql_server等数据库时可以在定义的字段名后面加上increment或autoincrement等标识符自动实现序列的增长。比如在mysql中

create talbe person (

    P_ID int NOT NULL auto_increment,

   P_NAME VARCHAR(200)

)

默认地,设置了auto_increment的字段从1开始,每次增加1

但是在oracle中设置自动增长序列稍微要麻烦一点,需要以下步骤:

1、首先创建表,还是以上面创建的表为例

2、创建一个序列,从100开始,每次增加1

create sequence PERSON_ID  --PERSON_ID为这个序列的名称

minvalue 1

maxvalue 9999999999999999999999999999

start with 100 --从100开始生成序列

increment by 1 --增量为1

cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度


3、为Person表创建一个before insert的触发器,在每次插入数据前该触发器自动为ID设置上面的序列值

CREATE OR REPLACE TRIGGER "PERSON_ID_GENERATOR"  BEFORE

INSERT ON "PERSON" FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录

declare        

    mid number;   

begin        

    select order_id.nextval into mid from dual; --order_id.nextval是获得上面定义的序列ORDER_ID的下一个值     

    :new.p_id:=mid; --将得到的序列值赋给表order的主键id, 可以用":new"引用将要插入的一行数据end;


4、这样下次在向person表中插入数据时,直接调用insert into PERSON(p_name) values ('张三')

不用显示在sql语句中插入P_ID,oracle会自动调用上面的触发器为P_ID赋值。

你可能感兴趣的:(oracle设置自动增长序列)