PL / SQL开发人员:调试挂起在某些代码上

时间:2014-03-11 11:53:14

标签: oracle debugging plsql oracle11g plsqldeveloper

我注意到在使用PL / SQL Developer调试代码时,调试器会依赖于某些代码。第一个猜测是责怪这行代码,但进一步的调查没有发现任何可疑的内容。只需在存储过程内部进行简单操作或调用系统函数。显然没有理由挂起。

查询系统视图使我发现调试器会话的当前SQL_CODE是:

declare ret binary_integer; begin ret := PBSDE.DEBUG_LOOP; end;

经过一段时间PL / SQL Developer抛出错误:

ORA-06502: PL/SQL: numeric or value error: character to number conversion error

我在Oracle支持网站上找到了完全相同症状的相关说明(文档ID 1074885.1)。但解决方案表明存在滑稽或可悲。我知道有关Oracle支持的信息不允许共享,但这样的事情应该违反规则。我将冒昧地引用解决方案部分:

  

不要在调试模式下针对Oracle数据库运行PL / SQL Developer。

是的,就是这样。那我有什么选择呢?

2 个答案:

答案 0 :(得分:3)

似乎你很幸运地遇到了Oracle数据库内部错误(技术上不是错误,称之为#34;功能"如果你愿意)和你使用的SQL开发工具的组合。 Allround Automations论坛上有关于此问题的几个主题(即this one,您可以通过关键字PBSDE.DEBUG_LOOP搜索其他主题),但没有明确的解决方案建议。正如Oracle经常发生的那样,Allround Automations指责数据库。

简而言之,PL / SQL Developer使用系统包DBMS_DEBUG及其例程进行调试。包本身有点过时(在8i版本中引入),但许多IDE仍然使用它。挂起的原因在于此包中的内容,PL / SQL Developer与它无关(除了根本不使用包)。理想情况下,Oracle应该修复它,但这不太可能发生,因为有更多的现代替代包名为DBMS_DEBUG_JDWP,它们用于相同的目的。似乎支持使用此软件包进行调试的唯一工具是Oracle自己的SQL Developer和JDeveloper(这就是为什么在Oracle的废弃代码中修复bug的原因很少)。

所以替代方法是使用SQL Developer或JDeveloper进行调试,直到PL / SQL Developer开始使用DBMS_DEBUG_JDWP或Oracle修复DBMS_DEBUG。在Oracle documentation中有关于该主题的详细分步指南。

答案 1 :(得分:-2)

有时,SQL Navigator会丢失引用,并且不会调试某些过程。要更正此问题,您应该编译要调试的过程。这并不意味着程序本身无效。