执行可调用语句时出现 SQLException

Posted

技术标签:

【中文标题】执行可调用语句时出现 SQLException【英文标题】:SQLException when executing a callablestatement 【发布时间】:2016-05-31 23:25:15 【问题描述】:

我试图从我的 java 应用程序的包中调用一个过程,但收到一个错误。代码是这样设置的……

-----Java-----

Connection = conn;
String call_code="? = call MY_PROCEDURE.Process_vale(?,?,?)";
CallableStatement Process_cs=conn.prepareCall(call_code);

String bValue= "12345";
Process_cs.setString(1, bValue);
Process_cs.registerOutParameter(2, Types.INTEGER);
Process_cs.registerOutParameter(3, Types.VARCHAR);
Process_cs.execute();

程序设置如下:

PROCEDURE Process_value (bValue VARCHAR2, PN_CD OUT NUMBER, PN_MSG OUT VARCHAR2).....

我看到的错误是:

java.sql.SQLException: 索引处缺少 IN 或 OUT 参数:: 4

我很好奇为什么它提到索引 4,当过程只有 3 个参数时,我相信我在这里遗漏了一个关键事实。

【问题讨论】:

您似乎有一个未注册的参数;结果? = 【参考方案1】:

你在这里犯了一些严重的错误。首先,由于您正在调用一个过程,因此您不会获得任何返回值,因此只有函数可以具有返回值。因此,您必须按如下方式调用该过程。

String call_code="call MY_PROCEDURE.Process_vale(?,?,?)";

如果你的程序第一个参数是IN类型,其他两个参数是OUT类型,你可以成功执行。

【讨论】:

以上是关于执行可调用语句时出现 SQLException的主要内容,如果未能解决你的问题,请参考以下文章

关于MySQL5.6的limit和offset在命令行执行时出现的问题的记录

在线程中执行 MySQL 存储过程并获取不支持的可调用语句

执行 INSERT INTO 语句时出现语法错误

通过 db2-luw 上的 xmlquery 使用正则表达式执行更新语句时出现 SQL 错误

执行从 UDF 返回的语句时出现问题 - 没有结果集

更新时出现休眠错误:无法执行语句,在 'index=1' 附近使用正确的语法