oracle设置自动增长序列

Posted 陈扬天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle设置自动增长序列相关的知识,希望对你有一定的参考价值。

我们在用MS SQL Server时,可以为表的主键设置为自动加1的效果;但是在Oracle当中,我们是无法直接设置一个字段为自动加1,需要先建立一个Sequence,然后为这个表创建一个Trigger,具体步骤如下:

1.先建立一个Order表格,用如下SQL语句

create table SCOTT.ORDER
(
      ID          NUMBER(10) not null,
      BUYER       CHAR(20) not null,
      MERCHANDISE VARCHAR2(50) not null,
      QUANTITY    LONG not null,
      UNITPRICE   NUMBER(10,2) not null,
      TOTALPRICE  NUMBER(20,4),
      DESCRIPTION NVARCHAR2(1000),
      PRIMARY KEY("ID")
)

2.创建一个序列,从10000开始计数,增量为1

create sequence ORDER_ID
minvalue 1
maxvalue 9999999999999999999999999999
start with 10000 --从10000开始生成序列
increment by 1 --增量为1
cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度

3.为Order表创建一个before insert的触发器,在插入之前将表order的主键设置为上面的序列值.

CREATE OR REPLACE TRIGGER "ORDER_ID_GENERATOR" BEFORE
INSERT ON "SCOTT"."ORDER" FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录
declare   
      mid number;   
begin   
      select order_id.nextval into mid from dual; --order_id.nextval是获得上面定义的序列ORDER_ID的下一个值
      :new.id:=mid; --将得到的序列值赋给表order的主键id, 可以用":new"引用将要插入的一行数据
end;

这样,当执行插入记录的时候,可以这样写

insert into order(buyer,merchandise,quantity,unitprice)values("ABC","Product_ABC",200,10);

Oracle会调用上面创建的触发器将序列值赋值给主键ID























以上是关于oracle设置自动增长序列的主要内容,如果未能解决你的问题,请参考以下文章

oracle设置id自动增长

Oracle怎么建自动增长列

mysql的主键是自动增长的,oracle的主键是起啥作用的

oracle中如何设置主键并且让其自动增长

oracle数据库在表中加主键创建自动增长序列权限不足怎么办

pgsql如何让表id自动增长