来自java的过程调用引发异常

来自java的过程调用引发异常,java,oracle,servlets,plsql,Java,Oracle,Servlets,Plsql,我在Oracle数据库中有一个PL/SQL过程。该程序涵盖了脚本末尾的异常情况,包括: EXCEPTION WHEN OTHERS THEN v_error_text := 'Error case'; v_error_text变量是一个out参数,用于在java端记录异常。我从JavaWeb应用程序中调用此脚本。有时,它抛出异常,不是来自Oracle方面,而是来自java java.sql.SQLException: ORA-06502: PL/SQL: numeric or value

我在Oracle数据库中有一个PL/SQL过程。该程序涵盖了脚本末尾的异常情况,包括:

EXCEPTION WHEN OTHERS THEN
  v_error_text :=  'Error case';
v_error_text变量是一个out参数,用于在java端记录异常。我从JavaWeb应用程序中调用此脚本。有时,它抛出异常,不是来自Oracle方面,而是来自java

java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
正如它所说,它抛出了一个异常,可能是将字符转换为数字。但由于这个过程有一个异常处理,所以它不能从java端抛出这个错误,它必须从Oracle端抛出这个错误,我将能够得到作为输出参数发送的错误文本(v_error_text)

即使我宣布了例外情况,这怎么可能,有什么想法吗

非常感谢

编辑:

我没有添加java代码,在这里我们可以看到:

package oracle;

import java.sql.Connection;
import java.sql.DriverManager;

import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.driver.OracleDriver;

public class MyTestClass {

    static String URL = "jdbc:oracle:thin:@//127.0.0.1:1521/test";
    static String USER = "myuser";
    static String PASS = "mspass";

    public static void main(String[] args) throws Exception {
        DriverManager.registerDriver(new OracleDriver());

        Connection jConn = null;
        OracleCallableStatement jStmt = null;

        jConn = (OracleConnection) DriverManager
                .getConnection(URL, USER, PASS);

        jStmt = (OracleCallableStatement) jConn
                .prepareCall("{ call MYPACKET.MYPROCEDURE(?, ?, ?) }");
        jStmt.setString(1, "Test 1");
        jStmt.setString(2, "Test 2");

        jStmt.execute();

        jConn.close();
    }

}

听起来Java代码没有正确验证存储过程上的输入。您需要验证输入类型是否与存储过程中定义的类型匹配。您看到的异常没有发生在存储过程中,而是在执行存储过程之前发生在Java中。

听起来Java代码没有正确验证存储过程中的输入。您需要验证输入类型是否与存储过程中定义的类型匹配。您看到的异常没有发生在存储过程中,而是在执行存储过程之前发生在Java中。

听起来Java代码没有正确验证存储过程中的输入。您需要验证输入类型是否与存储过程中定义的类型匹配。您看到的异常没有发生在存储过程中,而是在执行存储过程之前发生在Java中。

听起来Java代码没有正确验证存储过程中的输入。您需要验证输入类型是否与存储过程中定义的类型匹配。您看到的异常不是在存储过程中发生的,而是在执行存储过程之前在Java中发生的。

该错误似乎是在过程运行之前发生的,因此时的
异常无效。您尚未显示该过程的PL/SQL代码,因此我不确定,但这三个参数中的一个或多个必须是数字,并且您将一个不可转换的值作为参数传递


JDBC驱动程序对这个过程一无所知(比如我;-),而是将值传递给数据库。数据库知道过程的定义,并尝试转换参数,但失败。该错误发生在过程外部,并作为异常传递回调用java代码。

该错误似乎发生在过程运行之前,因此当
时的
异常无效。您尚未显示该过程的PL/SQL代码,因此我不确定,但这三个参数中的一个或多个必须是数字,并且您将一个不可转换的值作为参数传递


JDBC驱动程序对这个过程一无所知(比如我;-),而是将值传递给数据库。数据库知道过程的定义,并尝试转换参数,但失败。该错误发生在过程外部,并作为异常传递回调用java代码。

该错误似乎发生在过程运行之前,因此当
时的
异常无效。您尚未显示该过程的PL/SQL代码,因此我不确定,但这三个参数中的一个或多个必须是数字,并且您将一个不可转换的值作为参数传递


JDBC驱动程序对这个过程一无所知(比如我;-),而是将值传递给数据库。数据库知道过程的定义,并尝试转换参数,但失败。该错误发生在过程外部,并作为异常传递回调用java代码。

该错误似乎发生在过程运行之前,因此当
时的
异常无效。您尚未显示该过程的PL/SQL代码,因此我不确定,但这三个参数中的一个或多个必须是数字,并且您将一个不可转换的值作为参数传递


JDBC驱动程序对这个过程一无所知(比如我;-),而是将值传递给数据库。数据库知道过程的定义,并尝试转换参数,但失败。错误发生在过程之外,并作为调用java代码的异常情况传回。

您如何在java中调用存储过程?你能添加你用来做这件事的代码吗?我怀疑这就是问题所在。如果您遇到错误,Oracle甚至没有进入您的过程,因此它将无法使用异常处理程序。从消息判断,似乎有些东西是您期望的数字,但不是-也许它是
NULL
?抱歉,我刚刚添加了java代码:)您如何在java中调用存储过程?你能添加你用来做这件事的代码吗?我怀疑这就是问题所在。如果您遇到错误,Oracle甚至没有进入您的过程,因此它将无法使用异常处理程序。从消息判断,似乎有些东西是您期望的数字,但不是-也许它是
NULL
?抱歉,我刚刚添加了java代码:)您如何在java中调用存储过程?你能添加你用来做这件事的代码吗?我怀疑这就是问题所在。如果您遇到错误,Oracle甚至没有进入您的过程,因此它将无法使用异常处理程序。从消息判断,似乎有些东西是您期望的数字,但不是-也许它是
NULL
?抱歉,我刚刚添加了java代码:)您如何在java中调用存储过程?您能添加您用于的代码吗