达梦中组合主键创建的问题

达梦中组合主键创建的问题

最近在Oracle迁移到达梦中遇到一个组合主键的问题,Oracle中该表已经是组合主键的结构,在迁移的数据到达梦后建立组合主键时报错违反唯一性约束,接下来与大家一起分享下这个问题

构建Oracle中的创建测试表

oracle中表结构的创建如下

create table test01

(

"ID" int not null,

"NAME" VARCHAR(20) not null,

primary key("ID","NAME")

);

插入两条测试数据

insert into test01 values (1,'A');

insert into test01 values (1,'A ');

在Oracle中以上是可以正常执行插入的,接下来使用达梦迁移工具迁移到达梦中

迁移表数据到达梦

使用达梦迁移工具进行迁移

可以看见在添加主键约束的时候失败了,查看具体的报错为违反唯一性约束

刚开始遇到这个问题的时候,怀疑是Oracle那边的数据有重复的,于是在Oracle端排查数据是否有重复的问题

select id,name,count(*) from test01 group by id,name having count(*) >1;

并没有发现有重复的数据,于是到达梦这边也使用这条语句进行查询,结果也是没有重复数据

接下来在达梦这边先用同样的语句创建好表结构,在进行迁移数据

先使用语句在达梦中创建好表结构,再迁移数据

create table test01

(

"ID" int not null,

"NAME" VARCHAR(20) not null,

primary key("ID","NAME")

);

结果还是报错违反唯一性约束,后续仔细检查后发现,问题数据正如同我上面创建的测试数据一样,‘A’ 与 ‘A ’的差别

执行以下sql查询:

select trim(id),trim(name),count(*) from test01 group by trim(id),trim(name) having count(*) >1;

达梦与Oracle中的结果都是一样,证明迁移工具迁移数据时并没有做trim的处理,但在创建主键的时候,达梦中确报错了违反唯一性约束

将达梦中这条’A’ 与’A ’ 的数据中的一条进行删除后,再次创建主键,成功,问题就出在这两条数据中,第二个’A '中后面接了一个空格,导致达梦中的主键创建失败

你可能也喜欢

营业厅办理有余卡为何频遇阻碍?
约彩365app官方版下载

营业厅办理有余卡为何频遇阻碍?

07-25 8641
HP自带的哪些软件好用
365bet开户网站

HP自带的哪些软件好用

08-03 143
C 库函数 -system()
约彩365app官方版下载

C 库函数 -system()

07-11 2818