Я заметил эту проблему при экспорте результата выполнения Oracle SQL из Intellij.
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, который не ожидался.
Но если я добавлю ORDER BY doc_id
в sql и реэкспортирую результат, все станет хорошо.
Я подумал, что это может быть вызвано подкачкой, поэтому я написал Java-программу для получения данных.Не повезло, выходной файл также имеет менее 137272 строк и с некоторыми дублированными строками.
Если я изменю FetchSize на 1000, иногда результат будет в порядке.Если размер выборки равен 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
}
}
}