检索没有输出参数的 StoredProcedure 结果

问题描述 投票:0回答:1

我正在使用一个我无权更改的存储过程。该存储过程接受一个输入数组,但没有输出参数,因为它只是将数据插入到 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
的执行方法,但不知道当没有输出参数可供我检索时如何正确使用这些方法。我所要求的是否可以在不更改存储过程的情况下实现?

java sql oracle-database
1个回答
0
投票

“sql%Rowcount”是返回受最新执行语句影响的行数的 PL/SQL 语句,因为没有人知道你的“存储过程”做了什么以及如何做(除了你说它插入到 2 个表中,这意味着你会需要在过程本身内至少获得两次“sql%Rowcount”...),不可能给你一个答案,无论如何,这都不是一个非常聪明的做事方式。 唯一知道或能够有效地收集已插入的行数的代码是过程本身,因此任何有效的解决方案都意味着您必须修改它才能返回结果。

(“之后的行数”和“之前的行数”的差异肯定不属于智能类,但是 - 如果您在所有相关表上都有 PK 或唯一索引 - 可能不会像看起来那样低效。 .)

(调用 CallableStatement 的标准方法是“execute()”,而不是用于 DML“插入/更新/删除”的“executeUpdate()”。)

© www.soinside.com 2019 - 2024. All rights reserved.