不管你在Oracle應用系統開發的經驗有多少年了?你真的知道Dual是甚麼嗎?
Dual 的用法難道只是這樣嗎?Select xxx into yyy From Dual;
大家都知道當
但Dual是甚麼?
Desc Dual 後會發現
**SQL> desc dual;
名稱 空值? 類型
DUMMY VARCHAR2(1)**
X**
就算知道了Dual是個Table Name,又如何?的確,一點都不重要。
但如果,有一天你遇到跟我犯過一樣的錯誤,那就一點都不好玩,而且會開始覺得它很重要。
話說身為Oracle菜鳥的某一天,我在學習SQL過程,不小心把DUAL給新增了一筆!
結果直到某單位User給回報了一個錯誤信息後,
可能大家都有經驗,在Oracle Form 這種常常報出一堆非Ora-xxxx錯誤的情況之下(FRM-XXXXX),
有時候不太容易辨別錯在哪裡?
當時我幾乎把程式碼給翻過了N遍,
最後,竟然發現,打死都不會去懷疑的那一段SQL,Select ... into xxx From Dual; 就是兇手。
這才發現原來是Dual裡面有兩筆紀錄,所以報錯!
這個事件讓我對DUAL有了更充分的認識,
後來也因此發現利用Oracle Dual這種特性,可以衍生不同用途。
P.S 據說資料庫版本 Oracle 9之後,已經會自動偵測並維持只有一筆紀錄的設計,
所以這幾年就應該很少人會遭遇到跟我相同的災難吧!