我正在使用一个我无权更改的存储过程。该存储过程接受一个输入数组,但没有输出参数,因为它只是将数据插入到 2 个表中。我将如何检索插入的记录数(如果有)?
目前,旧代码看起来与此类似:
String sqlQuery = "{call storedprocedure(?)}";
Array input = methodForBuildingInput();
CallableStatement statement;
Connection conn;
//error checking
statement = conn.prepareCall(sqlQuery);
statement.setArray(1, input);
int result = statement.executeUpdate();
log.write(result + " records were written");
当前结果每次都是“1”,因为我认为
executeUpdate
的此功能不适用于存储过程。我想我需要使用 registerOutParameters
的执行方法,但不知道当没有输出参数可供我检索时如何正确使用这些方法。我所要求的是否可以在不更改存储过程的情况下实现?
“sql%Rowcount”是返回受最新执行语句影响的行数的 PL/SQL 语句,因为没有人知道你的“存储过程”做了什么以及如何做(除了你说它插入到 2 个表中,这意味着你会需要在过程本身内至少获得两次“sql%Rowcount”...),不可能给你一个答案,无论如何,这都不是一个非常聪明的做事方式。 唯一知道或能够有效地收集已插入的行数的代码是过程本身,因此任何有效的解决方案都意味着您必须修改它才能返回结果。
(“之后的行数”和“之前的行数”的差异肯定不属于智能类,但是 - 如果您在所有相关表上都有 PK 或唯一索引 - 可能不会像看起来那样低效。 .)(调用 CallableStatement 的标准方法是“execute()”,而不是用于 DML“插入/更新/删除”的“executeUpdate()”。)