ORACLE 空串'' 问题

对一个defaultValue=”且not null的新增字段增加索引,会引发COUNT计算结果为0的问题

– 创建测试表

CREATE TABLE tmp_tab_a(ID NUMBER PRIMARY KEY, NAME VARCHAR2(20));

– 插入测试数据

begin
  for i in 1..100 loop
      INSERT into tmp_tab_a (id,NAME)values(i,'str'||i);
  end loop;
  commit;
end;

– count(*)结果为100
– 执行计划显示走的主键索引进行count(*)计算

select count(*) from tmp_tab_a;

– 新增一个字段 sseqno not null , default = ”

alter table TMP_TAB_A add sseqno varchar2(20) default '' not null;

– 对字段sseqno新增一个索引

create index IND1_TMP_TAB_A ON TMP_TAB_A (sseqno);

– 异常情况出现count(*)结果都是 0
– 执行计划显示走的索引为IND1_TMP_TAB_A

select count(*) from TMP_TAB_A;
select count(id) from TMP_TAB_A;

– 将sseqno 的 not null属性去除,允许为null

alter table TMP_TAB_A modify sseqno null;

– 查询count结果为100, 结果正确!
– 执行计划显示走的主键索引进行count(*)计算

select count(*) from TMP_TAB_A;
select count(id) from TMP_TAB_A;

猜你喜欢

转载自blog.csdn.net/gzt19881123/article/details/78989050