oracle 自增1,ORACLE中实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能

最近在做一个把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序号的现象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值