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