我们公司的系统存在着大量的存储过程和package,有的很长,上万行(惊讶吗,第一次见到我也惊呆了),如何调试成了大问题,原来习惯于使用工具,pl/sql developer、toad等等,但是对于存储过程还可以,package就不行了,跳进去后所有的变量都是空的,取不到值,不知道大家都有什么办法去调试如此庞大的package,我也尝试着使用dbms_output,但毕竟不直观。

解决方案 »

  1.   

    包中的存储过程一个一个的调,做事切忌浮躁!我现在负责的这个BI项目,里面有1087个PACKAGE,每个PACKAGE的代码行数2000-20000不等,还不是一个一个的写,一个一个的调!
      

  2.   


    根据客户端报出来的异常信息就可以直接定位哪个包哪个过程哪一行
    比如:这个是我们系统报出来的
    com.fpg.u.ue.FpgRuntimeException: java. ql.SQLException: ORA-06502: PL/SQL: numeric or value error: character  tring buffer too  mall
    ORA-06512: at "U1PP.PXF000PUZ31", line 535 --最后定位在这一行!
    ORA-06512: at "U1PP.PXF000PAZBA", line 46  --一步一步过程调用过程
    ORA-06512: at "U1PP.PXF000PAZBA", line 27
    ORA-06512: at "U1PP.PXF000PAZBA", line 233
    ORA-06512: at "U1PP.PXF000PYE01", line 256
    ORA-01403: no data found
    ORA-06512: at line 1
      

  3.   

    找到大概出错的地方,把参数输入到临时表里面,针对单个package调试。