ORACLE中实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能
Jun 07, 2016 pm 03:51 PM欢迎进入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序号的现象。

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Berfungsi untuk mengira bilangan hari antara dua tarikh dalam oracle

Berapa lama log pangkalan data Oracle akan disimpan?

Urutan langkah permulaan pangkalan data oracle ialah

Keperluan konfigurasi perkakasan pelayan pangkalan data Oracle

Bagaimana untuk melihat bilangan kemunculan watak tertentu dalam Oracle

Berapa banyak memori yang diperlukan oleh oracle?

Bagaimana untuk menggantikan rentetan dalam oracle
