iT邦幫忙

DAY 1
6

哇咧~夠了(Oracle SQL)系列 第 1

Oracle SQL 從 Select * From Dual; 開始囉~

不管你在Oracle應用系統開發的經驗有多少年了?你真的知道Dual是甚麼嗎?
Dual 的用法難道只是這樣嗎?Select xxx into yyy From Dual;
大家都知道當

  1. 要從Sequence取的下一組序號,例如, Select xxx.nextval [into yyy] from dual;
  2. 在計算某個四則運算的結果,例如, Select 1+2+3+4 [into yyy] from dual;
  3. 其他...
    反正Select .... From Dual 就對了!

但Dual是甚麼?
Desc Dual 後會發現
**SQL> desc dual;
名稱 空值? 類型


DUMMY VARCHAR2(1)**

簡單說: 它就是一個Table,只有1個欄位,甚至只有一個唯一值'X'
**SQL> Select * From Dual;
DUMMY

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之後,已經會自動偵測並維持只有一筆紀錄的設計,
所以這幾年就應該很少人會遭遇到跟我相同的災難吧!


下一篇
單一SQL好,還是PL/SQL好?最好是再多問一句:哪一種寫法比較Smart!
系列文
哇咧~夠了(Oracle SQL)28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
總裁
iT邦好手 1 級 ‧ 2013-09-16 16:30:56

沙發

月半車甫 iT邦研究生 3 級 ‧ 2013-09-18 14:11:43 檢舉

感謝支持。

我要留言

立即登入留言