oracle bug 12415167,oracle12415167
drop table t1;
create table t1 (c1 char(2) primary key, c2 char(1) not null);
insert into t1 values ('A ','A');
select t1.c1 from t1
where t1.c1 in (select c2 from t1 union all select '0'||c2 c2 from t1);
select /*+ full(t1) */ t1.c1 from t1 where t1.c1 in (select c2 from t1 union all select '0'||c2 c2 from t1); 1st query returns no row, 2nd query return 'A'
这取决于数据库处理null的机制。
1、因为null不等于任何值,所以null='男'和null='女'的返回值都是unknown
2、而系统得到这个unknown后的反应有些特别
1)如果是在where条件中得到这个unknown,系统会返回flase。如:
select * from table_name where 1=null;
这个时候是不会有结果返回的。
2)但是如果这个unknown是在check约束中返回的会出现什么情况呢?
check约束会用这个unknown返回true值,也就是满足check约束。
3、这就是你的疑问的由来,值得一提的是这不是oracle的bug,不仅oracle这么处理,SqlServer、mysql、甚至access都已这样操作的。
4、相信经过上面的解释后你就不会有疑问了。
---
以上,希望对你有所帮助。
README说的清楚啊,如何备份,如何打补丁,如何回滚认真按说明来就问题不大。生产库一定做好备份,小BUG打补丁问题不大
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。