错误码:-6612
错误内容:违反唯一性约束
1、字面意思,当字段中存在主键/唯一约束/唯一索引时,插入重复数据会违反唯一性约束;
2、插入的字符串数据末尾存在空格,当初始化参数BLANK_PAD_MODE=0时,将不会对字符串末尾的空格进行比较
参数BLANK_PAD_MODE详解:
设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。1:兼容;0:不兼容,缺省值为0。注意:此参数在数据库创建成功后无法修改。
--查询参数
select * from v$parameter where name='BLANK_PAD_MODE';
--当BLANK_PAD_MODE=0,末尾带空格的数据将被识别为相同数据
create table test1(id int,name varchar(20));
insert into test1 values(1,'A');
insert into test1 values(2,'A ');
commit;
--此时创建唯一索引会报-6612
create unique index u_idx_test1_01 on test1(name);
-6612: 违反唯一性约束
--通过rtrim函数截断末尾空格排查统计重复数据
select rname,count(*) from (select rtrim(name,' ') as rname from test1) group by rname order by 2 desc;
--通过length函数返回给定字符串表达式的字符个数
select name,length(name) len from test1 order by name
--如果需要保证数据的一致性,需要重建数据库实例,将参数BLANK_PAD_MODE设为1,此时末尾带空格的字符数据将被识别为不同数据。
--初始化示例:
dminit PATH=/dmdata PORT_NUM=5236 PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=1 DB_NAME=DMDB INSTANCE_NAME=DMSERVER BLANK_PAD_MODE=1
文章
阅读量
获赞