我正在 java 程序的 for 循环中对 exadata 执行此查询
select a, b, c, d from (
select rownum r, a, b, c, d from foo order by c asc
) where r >= 40001 and r < 50001
在这里,我不断将数字增加 10000,因此在下一次循环迭代中,数字将是 50001 和 60001
我将这些行插入另一个数据库并再次循环。
目前,我的代码遇到随机错误,如
Exception in thread "main" java.sql.BatchUpdateException: Duplicate entry '23-ABC@XYZ.COM' for key 'PRIMARY'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1809)
at
当我检查我的源(exadata)数据库时,只有 1 行 a=23 和 b = ABC@XYZ.COM。所以来源没有任何重复。
当我检查我的目标数据库时,我可以看到行 a=23, b = ABC@XYZ.COM 已经插入到之前的循环迭代中。{{我在程序开始时删除并重新创建目标表。}}
所以看起来我的窗口查询一次又一次地返回同一行。
我做了很多搜索,我很确定我的窗口查询不应该返回重复项......但看起来确实如此
我不是 oracle/exadata 专家...所以让我知道上面的查询在使用不同的 rownum 范围运行时是否可以返回相同的行。