作為熟練.Net碼農以及非熟練Oracle用戶很多時候Oracle總給我一種這貨就是存心惡心我們的感覺。
雖然不得不承認Oracle是個很(an)好(gui)的產品,但是總有那麼好幾下被惡心到了。比如說屎一樣的驅動,還比如說今天遇到的奇怪錯誤。
事情是這樣子的:當在數據庫中增加了新的資料後,系統中執行如下腳本時總是報ORA-06502:
getmaterialinfo() dual
說明下,getmaterialinfo是個返回varchar2的function。好吧,看起來是function裡面變量的大小有問題,果斷調試之。
不過當執行下列調試語句時,奇跡發生了:
(( ;
是的,什麼都沒有發生!!!!就這麼正常結束了!!!!!一個奇跡由於什麼都沒有發生而發生了,這不是個奇跡又能是什麼?
好吧,神神叨叨的就跳過吧。還是簡單說下結論:
返回的字符串長度超過4000,而默認緩沖區大小是4000,於是Oracle果斷報了個錯(不理解為什麼返回類型設置了是varchar2(5000)了還需要糾結返回長度……求解釋?),拋出個看錯誤輸出的描述完全猜不到的錯誤來。
參考解決方法 http://stackoverflow.com/questions/3790379/how-to-query-a-clob-column-in-oracle,簡單說就是當作CLOB來處理就好了。
最後說一句:Oracle必須死