Oracle必須死之奇怪的ORA-06502錯誤


  作為熟練.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必須死


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM