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

标签 java oracle

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

我正在使用 Java 1.7 和 Oracle 12c。

我的包裹如下: 我使用了 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_login_id='RamN' 我传递给 IN OUT 参数,选择查询返回数据库中可用的 'RameshN' 并尝试分配给 p_user_login_id。

如果我传递 p_user_login_id='RamN123' 它成功返回 'RameshN'。

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

最佳答案

在这里大胆猜测,但试试这个:

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 参数是没有意义的。

关于java - 为什么 IN OUT 参数返回值而不注册可调用语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55850653/

相关文章:

java - SQL 不适用于结果集

sql-server - Access 数据库 - 链接到 SQL Server 和 Oracle

SQL查询挑战

oracle - oracle数据库的所有者是什么?

java - 在java中为xpath仅选择某些tr标签

java - 在特定字符串位置添加字符

java - Matlab - 如何编译 JAR 文件

oracle - 事实表 - 选择不同的?

java - 我如何限制 Jetty 接受的连接数?

java - Webview加载url但在默认浏览器中打开内容?