Oracle關於nvl的一個Bug
今天王工處理了一個關於nvl的Bug。
這個問題十分詭異,發生在Oracle的特定版本,特定用法。
王工不僅明確了Bug發生的條件,還推斷了大致的原因。
王工的技術總能讓我聯想到海...
版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
觸發條件: 1.NVL函式第一個引數的欄位為NOT NULL
2.使用FULL JOIN
3.NVL函式第一個引數的欄位在FULL JOIN 中被用在子查詢中
大致原因: 上述觸發條件同時成立,Oracle認為非空的欄位可以忽略NVL函式,但是FULL JOIN會新增NULL值的情況,它沒有考慮到。
不過僅僅限於FULL JOIN,LEFT JOIN的結果是正確的。
檢視執行計劃,發現沒有應用NVL過濾
而同樣的語句,沒有同時達到觸發條件,或者使用NVL2等,則沒有這個問題。
例如沒有子查詢的這個條件,則結果正常。
什麼時候才能像王工一樣厲害呢
這個問題十分詭異,發生在Oracle的特定版本,特定用法。
王工不僅明確了Bug發生的條件,還推斷了大致的原因。
王工的技術總能讓我聯想到海...
版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
觸發條件: 1.NVL函式第一個引數的欄位為NOT NULL
2.使用FULL JOIN
3.NVL函式第一個引數的欄位在FULL JOIN 中被用在子查詢中
大致原因: 上述觸發條件同時成立,Oracle認為非空的欄位可以忽略NVL函式,但是FULL JOIN會新增NULL值的情況,它沒有考慮到。
不過僅僅限於FULL JOIN,LEFT JOIN的結果是正確的。
-
--建立實驗表
-
create table t1 as
-
select rownum id from dual connect by level<5;
-
create table t2 as
-
select rownum id from dual connect by level<10;
-
--整理資料
-
delete from t2 where id <3;
-
commit;
-
--新增主鍵
-
alter table t1 add constraint pk_t1 primary key (id);
-
alter table t2 add constraint pk_t2 primary key (id);
-
-
--測試語句
-
select * from t1 full outer join
-
(
-
select * from t2
-
) t2
-
on t1.id=t2.id
- where nvl(t2.id,t1.id)=1;
而同樣的語句,沒有同時達到觸發條件,或者使用NVL2等,則沒有這個問題。
例如沒有子查詢的這個條件,則結果正常。
什麼時候才能像王工一樣厲害呢
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1065126/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個關於recyclerView的bugView
- 關於UIInterfaceOrientation的一個bugUI
- 關於Oracle中重啟資料庫的一個bugOracle資料庫
- oracle的一個bugOracle
- MySQL關於timestamp和mysqldump的一個“bug”MySql
- 一個關於臨時物件的BUG(下) (轉)物件
- 發現了一個關於 gin 1.3.0 框架的 bug框架
- [BUG反饋]兩個關於釋出文章的BUG
- 關於'kksfbc child completion' wait的一個bugAI
- oracle 10.2.0.2.0的一個BUGOracle
- Oracle-nvl和nvl2函式Oracle函式
- 踩到一個關於分散式鎖的非比尋常的BUG!分散式
- 【Oracle的NVL函式用法】Oracle函式
- 對遠端表使用NVL2的bug
- 一個oracle查詢引起的bugOracle
- 舒服了,踩到一個關於分散式鎖的非比尋常的BUG!分散式
- 一個oracle bug的簡單驗證Oracle
- oracle的兩個bugOracle
- oracle 關於例項恢復的一個討論Oracle
- Oracle中處理空值的函式nvl-nvl2-lnnvl-nullif的用法Oracle函式Null
- 關於記憶體的一些bug (轉)記憶體
- oracle 10gR2 RAC 的一個BUGOracle 10g
- oracle9i replace clob 的一個bugOracle
- nvl, nvl2, nullifNull
- 關於Oracle 的url 連線 最後一個orcl的理解Oracle
- 關於oracle 9i的閃回的一個錯誤Oracle
- 問一個關於oracle8的簡單的問題!Oracle
- oracle串物件相關的bugOracle物件
- [BUG反饋]關於設定選單的BUG
- 新學一個函式nvl2(a,b,c)函式
- 關於Sqlite的一個demoSQLite
- 關於Oracle full outer join 的bug問題分析及處理Oracle
- 關於oracle的一些命令Oracle
- 關於ORACLE的一點總結Oracle
- 關於ORACLE Bug 14143632和online patchOracle
- 關於 oracle 9i 閃回的一個錯誤補Oracle
- 請教一個關於hibernate對映oracle的問題Oracle
- 關於oracle的jobs的兩個檢視Oracle