视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ORACLE中实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能
2020-11-09 15:24:36 责编:小采
文档


欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 最近在做一个把SQL SERVER中的数据库的表同步到ORACLE 中,排除解决了了一系列如类型不匹配等产生的错误后,终于将数据同步过来了,可是又发现了一个新问题:SQL SERVER中源表的ID是通过IDENTITY(1

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

  最近在做一个把SQL SERVER中的数据库的表同步到ORACLE 中,排除解决了了一系列如类型不匹配等产生的错误后,终于将数据同步过来了,可是又发现了一个新问题:SQL SERVER中源表的ID是通过IDENTITY(1,1)自增的,ORACLE中的表示通过sequences实现的自增,但问题是:我是通过在SQL SERVER中的存储过程,经由链接服务器直接将数据插入到ORACLE的表中,这样,SQL SERVER中的存储过程中就没办法直接调用ORACLE的sequences进行ID的自增。直接将SQL SERVER中表的ID复制到ORACLE表中又会使得ID重复不唯一。

  以下有一种方法,可以让ORACLE中的表实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能,原理是通过sequences与triggers触发器实现。

  首先,在ORACLE建立一个sequences:

  create sequence SEQ_TABLE_TEST

  minvalue 1

  maxvalue 999999999

  start with 1

  increment by 1

  cache 20;

  再建立一个triggers:

  create or replace trigger TGR_TABLE_TEST

  before insert on TABLE_TEST

  for each row

  declare

  -- local variables here

  begin

  if inserting and :new.id is null then

  :new.id := SEQ_TABLE_TEST.nextval;

  end if;

  end TGR_TABLE_TEST;

  好了,这样就可以实现自增功能了,无论是正常插入:

  insert into TABLE_TEST

  values(seq_table_test.nextval,1.1)

  还是

  insert into TABLE_TEST(value)

  values(1.2)

  或者是

  insert into TABLE_TEST(id,value)

  values(null,1.3)

  表TABLE_TEST中的ID字段都实现了自增的功能。

  另外因为triggers中有:new.id is null的判断,当正常调用seq_table_test.nextval插入时,也不会产生浪费sequences序号的现象。

下载本文
显示全文
专题