从Intellij导出Oracle SQL执行结果时,我注意到了这个问题。
sql是"SELECT TableA.seq||'-'||TableB.id doc_id FROM schemaA.TableA JOIN schemaB.TableB JOIN schemaA.TableC JOIN schemaA.TableD ON ...."
SELECT COUNT(doc_id)
结果总计为137272
,但是,导出的CSV文件的行数少于137272(有时为137258,不是固定的)。
我检查了结果,令人惊讶地发现有重复的doc_id,这是不期望的。
但是,如果我在sql中添加ORDER BY doc_id
并重新导出结果,一切都会变好。
我认为这可能是由分页引起的,因此我编写了一个Java程序来获取数据。运气不好,输出文件也少于137272行,并且有一些重复的行。
如果我将FetchSize更改为1000,有时结果就可以了。如果fetchsize为100,则始终没有运气。
我无法弄清楚问题,我对JDBC的使用是否错误?
try (Connection conn = DriverManager.getConnection(JDBC_CONNECTION,
JDBC_USER, JDBC_PASSWORD)) {
try (Statement statement = conn.createStatement(); FileWriter fw = new FileWriter("out.txt")) {
statement.setFetchSize(100);
try (ResultSet rs = statement.executeQuery(sql)) {
while (rs.next()) {
fw.write(rs.getString(1));
fw.write("\n");
}
} catch (SQLException ex) {
// not shown in this code snippet
}
}
}