有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么IN-OUT参数返回值而不注册callable语句?

我正在调用pk_adduser。pr_checkuser()来自java,使用CallableStatement,其中包含两个IN参数和一个IN-OUT参数。我没有使用CallableStatement注册IN-OUT参数。registerOutParameter(int-parameterIndex,int-sqlType)。 但是,如果返回值的长度与输入值的长度相同,我仍然能够使用IN-OUT参数获取输出值,否则我将得到类似于ORA-06502:PL/SQL:numeric或value error的SQL异常

我正在使用Java1.7和Oracle12c

我的包裹如下: 我使用了p_user_login_id参数,但没有包含在给定的代码中,只是给定的一段代码

create or replace PACKAGE BODY pk_adduser
AS
PROCEDURE pr_checkuser (
      p_first_name          IN       VARCHAR,
      p_last_name           IN       VARCHAR,
      p_user_login_id       IN OUT   VARCHAR);

/

PROCEDURE pr_checkuser (
      p_first_name          IN       VARCHAR,
      p_last_name           IN       VARCHAR,
      p_user_login_id       IN OUT   VARCHAR)
IS

BEGIN
    SELECT user_login_id
    INTO p_user_login_id
    FROM user_account
    WHERE first_name = p_first_name
    AND last_name    = p_last_name;
END pr_checkuser;
END;

我的Java代码如下所示:

String getcall = "{call pk_adduser.pr_checkuser (?,?,?)}";
CallableStatement callsts = connect.prepareCall(getcall);
callsts.setString(1, "Ramesh");
callsts.setString(2, "Nuvvula");
callsts.setString(3, "RamN");
callsts.execute();
String user_id = callsts.getString(3);
System.out.println("user_id: "+user_id);

p_user\u login\u id='RamN'我正在传递输入输出参数,选择查询返回“RameshN”,该参数在数据库中可用,并尝试分配给p_user\u login\u id

如果我通过p_user_login_id='RamN123'成功返回'RameshN'

我认为传递参数值的长度是个问题。但我的问题是它怎么会这样


共 (1) 个答案

  1. # 1 楼答案

    在这里做一个疯狂的猜测,但是试试这个:

    String result = "RamN";
    String getcall = "{call pk_adduser.pr_checkuser (?,?,?)}";
    CallableStatement callsts = connect.prepareCall(getcall);
    callsts.setString(1, "Ramesh");
    callsts.setString(2, "Nuvvula");
    callsts.setString(3,  result);
    callsts.execute();
    String user_id = callsts.getString(3);
    

    但是,pl/sql代码没有意义传入其in值从未使用过的in/out参数