아래의 코드는 오라클의 열린 커서에 몇 가지 문제점을 제공합니다 (명확성을 위해 편집 됨). 기본적으로 DB에서 데이터를 선택하려고하고 반환되는 각 행에 대해 0 개 이상의 행의 하위 데이터가 선택되어 레코드에 추가됩니다. 현재 서브 데이터를 읽도록 주 데이터 세트를 채우는 동안 다른 기능을 호출하여이 작업을 수행하고 있습니다. 이는 로우 행이 1000 개 미만인 경우에 적합합니다. 사용자가 사용할 정상적인 작동 범위 인 반면, 수천 행의 순서 일 수있는 모든 행을 요청할 수 있습니다. 큰 볼륨을 선택하면 의 결과가 발생합니다. ORA-01000 : 최대 열린 커서가 오류를 초과했습니다. 코드를 실행하고 v $ open_cursors를 쿼리하면 넘어 질 때까지 커서 카운트가 올라가는 것을 볼 수 있습니다.Java가 Oracle 커서를 해제하지 않습니다.
sub 함수를 호출하는 행을 주석 처리하면 제대로 작동하지만 v $ open_cursors의 커서 개수는 몇 번씩 위아래로 변동합니다.
주 함수가 하위 함수에 연결 개체를 전달하는 것으로 나타났습니다. 코드에 의해 닫혀 있어도 연결이 열린 상태에서 결과 문과 결과 집합이 열린 상태로 유지 될 수 있다고 생각했습니다. 그래서 코드를 변경하여 각 함수가 풀에서 자체 연결을 얻고 완료되면 닫습니다. 그러나 커서와 아무런 차이가 없습니다.
나는 커서의 수를 늘릴 수 있지만, 그냥 문제를 가린다. b) 그것을 작동시키기 위해 바보처럼 높은 숫자를 고수해야한다. c) 나는 풀어주고 싶지 않다. 결함있는 코드!
그러나 커서를 놓을 코드를 얻는 방법에 대한 아이디어가 부족합니다.
어떤 버전의 데이터베이스를 사용하고 있습니까? 어떤 JDBC 드라이버 (오라클?)와 어떤 버전? – APC
죄송합니다. 거기에 정보가 크게 누락되었습니다. ojdbc14.jar을 사용하는 Oracle 10.2.0.1.0. – javadeveloper