在Oracle DB存储的Java类中处理异常

在Oracle DB存储的Java类中处理异常,java,exception-handling,oracle11g,java-stored-procedures,Java,Exception Handling,Oracle11g,Java Stored Procedures,当存储的Java类命中并且出现未处理的异常时,将完整堆栈跟踪返回到PL/SQL以便正确记录的最佳方法是什么? 在类的初步测试中,我碰到了一个null指针,Oracle将其显示为未处理的Java异常。我得到的唯一信息是它是一个空指针——我没有得到关于它在代码中的位置的任何提示 显然,通过对客户提供的数据和单元测试的严格验证,我应该能够避免大多数异常,但是万一发生了什么事情呢 我正在考虑捕获异常,将它们的stacktrace存储在一个数组中,并将该数组返回给PLSQL。。。但我宁愿避免管理所有这些额

当存储的Java类命中并且出现未处理的异常时,将完整堆栈跟踪返回到PL/SQL以便正确记录的最佳方法是什么?

在类的初步测试中,我碰到了一个null指针,Oracle将其显示为未处理的Java异常。我得到的唯一信息是它是一个空指针——我没有得到关于它在代码中的位置的任何提示

显然,通过对客户提供的数据和单元测试的严格验证,我应该能够避免大多数异常,但是万一发生了什么事情呢

我正在考虑捕获异常,将它们的stacktrace存储在一个数组中,并将该数组返回给PLSQL。。。但我宁愿避免管理所有这些额外的返回值


这上面肯定已经有些东西了,不幸的是,我的Google fu让我失望了…

你可以获得完整的stacktrace,并将它们转换成
字符串,然后将其传递给
PL/SQL
进行日志记录。我从另一个SO问题得到了将
Stacktrace
转换为
String
的简单解决方案


你的问题是什么?我同意了。我将它们创建为静态变量,并创建了一个包装函数
log(Exception)
log(String)
(使用
pw.append
添加我自己的消息),用于开发/调试,该函数要么发送到System.out,要么发送到System.out,这取决于我是在本地JVM还是在数据库JVM上运行它。后来,我不得不捕获通过System.out完成的外部API的调试消息,但我无法访问代码来执行您建议的操作,因此我不得不使用类似的工具。很高兴,您能够做到这一点。谢谢
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
String stackTrace = sw.toString(); // Send it to PL/SQL