2017-01-13 1 views
-1

Java에서 Callable 문을 사용하는 프로 시저 호출의 '색인에서 누락 된 또는없는 매개 변수 : 7'이라는 예측할 수없는 오류가 발생합니다. 각 프로 시저 호출에서 우리는 연결을 닫지 않습니다. 이것이 문제입니까?IBM Websphere 포털 서버에서 닫히지 않은 Oracle 연결

참고 : 코드 구현은 절차를 호출하는 직접 코드가 아닙니다. DB 호출을 처리하는 내부 프레임 워크가 있으므로 전체 코드를 게시하기가 어렵습니다.

+0

유용하다고 생각되면 답변을 수락합니다. – MozenRath

답변

0

연결을 직접 만들지 않는 한 연결을 닫지 않아도됩니다. 그러나 CallableStatement을 닫아야합니다.

또한 in 또는 out 매개 변수가 누락되면 호출 가능 명령문에 지정된 수 또는 매개 변수와 비교할 때 프로 시저에 더 많은 매개 변수가 바인딩되어야한다는 표시입니다.

위의 경우가 아니라면 명령문에 매개 변수를 바인딩하지 않았을 수 있습니다.

예 :

call MY_PROC(?,?)

당신은 그것을 위해 자바 코드에서이 개 매개 변수를 바인딩해야합니다. 하지만 항상 발생하지는 않는다고 말하면서 오류가 발생했을 때 매개 변수 바인딩 중 하나가 만족스럽지 않은 상태 일 가능성이 있습니다 (if).

+0

전달 된 매개 변수의 수와 프로 시저에서 수락 한 매개 변수의 수는 같습니다. – Hareesh

+0

항상 throwing 예외가 아닙니다 – Hareesh

+0

http://stackoverflow.com/questions/27342697/missing-in-or-out-parameter-at-index-1-error-in-java-oracle – MozenRath

1

게시 할 수 있다면 도움이 될만한 코드 스 니펫이 있지만 가능한 원인에 대해서만 추측 할 수 있습니다. inout 매개 변수를 사용할 때마다 statement.setX (n, value) 에 입력 값을 설정해야 사용할 때마다 출력 매개 변수 인 statement.registerOutParameter (n, type)로 등록해야합니다. . 보다 완전한 예를 들어 오라클 JDBC 문서에서이 링크를 참조하십시오

http://docs.oracle.com/javadb/10.10.1.2/ref/rrefjdbc75719.html

당신은 또한 WebSphere Application Server의 데이터 소스가 호출 포함 (CallableStatement.close시) 기본적으로 CallableStatements를 캐시 알고 있어야 할 것 파라미터 치를 클리어 해, 파라미터 치를 보관 유지하고있는 것을 해제하는 효과를 가지는 CallableStatement.clearParameters out 매개 변수의 등록을 지울 수도 있습니다. 명령문 캐시를 사용 불가능으로 설정하려면 데이터 소스에서 statementCacheSize = 0을 구성하십시오. 또는 JDBC 4.0 이상을 사용하는 경우 개별 문을 CallableStatement.setPoolable (false)을 통해 캐시 할 수 없게 만들 수 있습니다. 명확히하기 위해, 나는 당신이 원인을 좁히는 데 도움이되는 실험으로서 만, 솔루션으로서 문장 캐싱의 불능화를 추천하는 것이 아니다.

+0

을 통해 처리됩니다. 코드 구현은 프로 시저를 호출하는 직접 코드가 아닙니다. DB 호출을 처리하는 내부 프레임 워크가 있으므로 전체 코드를 게시하기가 어렵습니다. 하지만 귀하의 대답은 구현을 해결하는 데 도움이 될 것입니다. 귀하의 제안에 따라 귀하의 답변이 일단 결정되면 귀하의 답변을 제외합니다. – Hareesh

관련 문제