Превышено максимальное количество курсоров. SQLException-- Проблема конфигурации или утечка курсора? - PullRequest
1 голос
/ 11 июня 2019

Я вызываю процедуру SQL через Java. Я получаю исключение SQL в журналах при выполнении моего кода java.sql.SQLException: ORA-01000: превышено максимальное количество открытых курсоров

Я прошел через подобные вопросы и попробовал это-

  1. увеличено open_cursors с 30000 до 40000.
  2. закрыл оператор в блоке try и finally.

Но это не решило проблему. Что-то не так с моим кодом?

Вот мой код Java-

public static void buildingHelpContent(String p_id) throws Throwable{
        Connection conn = ExtractHP.getConnection();
        CallableStatement cs = null;
        log.debug("arguments for COMP.Help.build_hp_data  p_id=  "+p_id);
        try {
            cs = conn.prepareCall("{call COMP.Help.build_hp_data(?)}");
            cs.setString(1, p_id);
            cs.execute();
            if(cs!=null)            
                cs.close();

        } catch (SQLException e) {
            log = ExtractHP.getLogger();
            log.debug("!!! Java Exception !!!\n");
            log.error("Exception while executing the procedure for ID ...."+ p_id, e);          
        }
        finally{
            if(cs!=null)
                cs.close();
        }
    }

1 Ответ

1 голос
/ 11 июня 2019

Вы не закрыли соединение, вы можете использовать блок try-with-resources (без finally):

    log.debug("arguments for COMP.Help.build_hp_data  p_id=  "+p_id);
    try (Connection conn = ExtractHP.getConnection();
        CallableStatement cs = conn.prepareCall("{call COMP.Help.build_hp_data(?)}")){

В Java 6 также закрыть соединение в finally:

finally{
        if(cs!=null)
            cs.close();
        if(conn!=null)
            conn.close();
    }
...