Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java调用存储过程-ORA错误时未引发异常_Java_Oracle_Stored Procedures_Jdbc_Try Catch - Fatal编程技术网

从Java调用存储过程-ORA错误时未引发异常

从Java调用存储过程-ORA错误时未引发异常,java,oracle,stored-procedures,jdbc,try-catch,Java,Oracle,Stored Procedures,Jdbc,Try Catch,我正在从Java调用一个Oracle存储过程,在执行CallableStatement后,将输入参数值发送到Java并将输出参数值返回到Java不会有任何问题 但是,当我向存储过程发送一些坏数据(以强制出错)并执行CallableStatement的execute方法时,我希望在方法中抛出SQLException。这种情况不会发生,代码将继续正常运行 通过SQL Developer运行存储过程时,我可以清楚地看到日志窗口中显示的oracle错误消息(codeORA-06502)。因此,为什么我的

我正在从Java调用一个Oracle存储过程,在执行
CallableStatement
后,将输入参数值发送到Java并将输出参数值返回到Java不会有任何问题

但是,当我向存储过程发送一些坏数据(以强制出错)并执行
CallableStatement
execute
方法时,我希望在方法中抛出
SQLException
。这种情况不会发生,代码将继续正常运行

通过SQL Developer运行存储过程时,我可以清楚地看到日志窗口中显示的oracle错误消息(code
ORA-06502
)。因此,为什么我的Java代码没有捕获任何错误消息对我来说是个谜

有人知道这种行为的根源是什么吗?存储过程是否未正确抛出错误;Java
try/catch
是否无法识别抛出的异常?不幸的是,我无法访问存储的过程代码来检查它们如何处理错误


欢迎使用任何指针。

Java不会抛出SQLException,因为调用存储过程Java函数(CallableStatement)已成功地将命令发送到Oracle。如果这个过程执行成功,CallableStatement的methode会给我们0,否则与0不同,所以您不会看到SQLException


但是在SQLDeveloper的例子中,它是一个真正的Oracle SQL解释器,因此您可以看到SQLException

只有当存储过程中的第一个可执行语句失败时才会引发异常。如果至少有一条语句执行正确,则不会抛出第一条异常


您可以尝试将事务放入存储过程本身,并在任何语句失败时捕获异常,并从catch块抛出异常。所有这些都在存储过程中。

我不相信在存储过程编码为显式执行此操作之前会引发SQLException。毫无疑问,如果抛出异常,JVM将捕获它