2012年3月20日 星期二

[射茶包]OCI-22053: 溢出錯誤的原因和解決方法


這是個很討厭的錯誤,如果是在DB裡面跟資料玩到一半的時候跑出來還好...
這個網址提供的方法就可以順利解決




嗯我知道大家都不喜歡進了一個網頁還要跳轉另一個網頁然後還要再開一個網頁
一不小心就會離題,然後忘記自己在做什麼....

所以,那個網頁裡面大概是說,用Round函數跟Floor函數可以解決出現在DB的OCI-22053
蛤?忘記怎麼用...

ROUND(m,n) 四捨五入 ROUND(2.54,1) = 2.5;
FLOOR(n) 無條件捨去小數 FLOOR(5.9) = 5;

出現在DB裡面,基本上把小數弄不見或是弄少一點就可以解決
可是最麻煩的是我都不是在DB裡面遇到這個錯阿(翻桌

有時候,嗯,在.NET丟SQL指令抓資料出來的那個瞬間會報這個錯
在資料抓好要進Datatable前就會報了

這裡有寫原因,喜歡的人可以去看看

總之就是數字太多就有可能發生這個,因為見鬼的我組出來的資料都保證沒有小數點還是有機會報這個錯
所以...大概知道一下原因在哪就好,重點是怎麼解決

有沒有比較聰明的辦法我不知道,但我是用to_Char的笨方法
簡單來說,就是在DB把資料撈出來前,全部先轉成字串,再硬貼給使用者看

很笨,但有效,而且可以保證藥到病除,至少我用到現在沒有再報過這個錯
大概就是把SQL從

select a,b,c from TABLE變成select to_Char(a),to_Char(b),to_Char(c) from TABLE

沒什麼技巧性啦,我試過Round跟Floor,發現還是to_Char最穩都不會出錯...
也許以後我比較聰明大腦皺摺比較多,會回來把文章補全,補個performance又好又快的方法

沒有留言:

張貼留言