2022-12-30 22:04:45
在Oracle中执行MERGE操作后,可通过SQL%ROWCOUNT获取受影响的总行数(含更新和插入的行数),但需注意实际更新或插入的行才会被计数,未实际修改的行不计入。
1. SQL%ROWCOUNT的计数规则使用Statement.executeUpdate()或PreparedStatement.executeUpdate()执行MERGE语句后,直接通过返回值获取受影响行数。
批处理时,executeBatch()可能返回Statement.SUCCESS_NO_INFO(即-2),表示操作成功但行数未知,需通过其他方式(如输出日志或查询)确认。
配置批处理执行器(ExecutorType.BATCH),执行MERGE后调用SqlSession.flushStatements()。
通过返回的BatchResult对象获取更新计数数组,数组中的每个元素对应一次操作的受影响行数。
检查SQL语句是否执行成功(无异常抛出)。
通过查询目标表或使用SELECT COUNT(*)验证实际修改的行数。
在JDBC连接参数中添加oracle.jdbc.ReadTimeout或调整批处理大小,以减少未知行数的情况。
通过合理使用SQL%ROWCOUNT和框架提供的API,可准确获取Oracle MERGE操作的实际影响行数,但需结合业务逻辑处理特殊情况。