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必须死

posted @ 2014-03-13 16:55  Nyarlathotep  阅读(9438)  评论(1编辑  收藏  举报