ORA-00604: erreur s'est produite lors de récursive SQL niveau 1
J'ai commencé à avoir le dessous SQL exception
et je ne sais pas quelle est la cause de cette exception? Je suis également de clôture dbconnection
et prepared statement
trop. Alors quel est le problème?
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-01000: maximum open cursors exceeded
Ci-dessous mon code que j'utilise. Rien qui cloche dans mon code?
for (Entry<Integer, LinkedHashMap<Integer, String>> entry : GUID_ID_MAPPING.entrySet()) {
pstatement = db_connection.prepareStatement(PDSLnPConstants.UPSERT_SQL); // create a statement
pstatement.setInt(1, entry.getKey());
pstatement.setString(2, entry.getValue().get(PDSLnPConstants.CGUID_ID));
pstatement.setString(3, entry.getValue().get(PDSLnPConstants.PGUID_ID));
pstatement.setString(4, entry.getValue().get(PDSLnPConstants.SGUID_ID));
pstatement.setString(5, entry.getValue().get(PDSLnPConstants.UID_ID));
pstatement.setString(6, entry.getValue().get(PDSLnPConstants.ULOC_ID));
pstatement.setString(7, entry.getValue().get(PDSLnPConstants.SLOC_ID));
pstatement.setString(8, entry.getValue().get(PDSLnPConstants.PLOC_ID));
pstatement.setString(9, entry.getValue().get(PDSLnPConstants.ALOC_ID));
pstatement.setString(10, entry.getValue().get(PDSLnPConstants.SITE_ID));
pstatement.executeUpdate();
}
} catch (SQLException e) {
getLogger().log(LogLevel.ERROR, e);
} finally {
if (pstatement!= null) {
try {
pstatement.close();
pstatement = null;
} catch (SQLException e) {
getLogger().log(LogLevel.ERROR, e.getMessage(), e.fillInStackTrace());
}
}
if (db_connection!= null) {
try {
db_connection.close();
db_connection = null;
} catch (SQLException e) {
getLogger().log(LogLevel.ERROR, e.getMessage(), e.fillInStackTrace());
}
}
Vous devez vous connecter pour publier un commentaire.
Je pense que le
PreparedStatement
définition devrait être sorti de la boucle et réutilisés à l'intérieur de la boucle en appelantclearParameters
:Vous pouvez également enquêter sur le traitement par lot (
addBatch
). Si vous testez, vous devrez peut-être attendre un peu pour les "ouvrir" curseurs pour être nettoyé.Eh bien, je suppose que je vais vous en donner un sens, je suis allé autour de lui mais de toute façon beaucoup de gens vont venir sur ce un problème si je pourrais ainsi partager.
J'ai été à l'aide de NetBeans 7.3.1 et se référant à une Base de données Oracle sur un Serveur distant, donc je ne pouvais pas modifier les Clés de Registre et à la place j'ai réalisé que j'étais à l'aide de ojdbc14.jar et j'avais besoin d' ojdbc6.jar dans mon classpath.
Solution: Utilisé ojdbc6.jar au lieu de ojdbc14.jar