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'
oracle check約束的bug?
這取決於資料庫處理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、相信經過上面的解釋後你就不會有疑問了。
---
以上,希望對你有所協助。
oracle怎給已知bug打補丁
README說的清楚啊,如何備份,如何打補丁,如何復原認真按說明來就問題不大。生產庫一定做好備份,小BUG打補丁問題不大