У меня есть класс Java, который вызывает процедуру SQL для выполнения некоторых операций с БД.Вот мой метод Java:
public static void buildContent(String id) throws Exception{
Connection conn = ExtractDB.getConnection();
CallableStatement cs = null;
log.debug("arguments for the procedure is= "+id);
try {
cs = conn.prepareCall("{call CMS.relix.build_rp_data(?)}");
cs.setString(1, id);
cs.execute();
if(cs!=null)
{
cs.close();
}
} catch (SQLException e) {
log.error("Exception while executing the procedure", e);
}
finally{
if(cs!=null)
{
cs.close();
}
}
}
После нескольких обработок, он печатает ниже ошибку в журнале и зависает там (я должен завершить процесс вручную, чтобы остановить выполнение):
Ora Err Msg :-1000
Ora Err Code :ORA-01000: maximum open cursors exceeded
ORA-01000: maximum open cursors exceeded
ORA-06512: at "CMS.relix", line 1700
ORA-06512: at line 1
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208) ...
Я попробовал следующее решение:
После добавления « throw » в блок catch процесс теперь не зависает и продолжает выполнение после печати той же ошибки SQL.
catch (SQLException e) {
log.error("Exception while executing the procedure", e);
throw e;
}
Я хочу, чтобы ваша помощь поняла следующие пункты:
- как добавить «throw e» в код, позволить программе продолжить работу даже после ошибки?
- как обработать эту ошибку / исключение, чтобы остановить обработку и выйти из программы, если возникла такая ситуация.