使用 springframework SimpleJdbcCall 捕获 RAISE_APPLICATION_ERROR

Catching RAISE_APPLICATION_ERROR with springframework SimpleJdbcCall

我有一个 PL/SQL 程序,我调用

RAISE_APPLICATION_ERROR (-20001, 'Illegal id');

如果出现问题。

这似乎行得通,因为过程退出并在应该抛出错误时抛出错误。

我调用这个过程使用

simpleJdbcCall.execute(myargs)

但是当我捕获异常时,它是 DataAccessException 类型的。 原因是ORA-01403: 找不到数据

我似乎无法从 RAISE_APPLICATION_ERROR 通话中获取号码或消息。我怎样才能得到这些值?

我们在我们的应用程序中做同样的事情;但是,ORA-20001 异常应该作为 UncategorizedSQLException 出现 Spring。如果您看到 ORA-01403,那么我怀疑您的程序可能以不同的方式失败:您确定 Spring 提交的参数与您进行单元测试时使用的参数相同吗?

如果您让 PL/SQL 过程除了引发 ORA-20001 之外什么都不做,您是否仍然从 Spring 得到 ORA-01403?您确定要对 PL/SQL 进行单元测试并将 Java 应用程序附加到同一个数据库吗?