2017-05-02 5 views
0

우리 프로젝트에서 최대 절전 모드를 ORM 도구로 사용하고 있습니다. 저장 프로 시저를 호출해야하는 시나리오가 있습니다. 이제이 저장 프로시 저는 내부적으로 커서를 사용하여 데이터베이스 테이블에 저장된 규칙 목록을 검색합니다.최대 절전 모드를 통해 호출 될 때 커서가있는 저장 프로 시저가 실패합니다.

커서를 반복 할 때 @@ sqlstatus! = 2를 확인합니다. 커서의 결과 세트가 완전히 통과되면 sqlstatus는 2가됩니다.

exec를 사용하여 저장 프로 시저를 직접 실행하면 결과가 반환됩니다. 또한 자바 JDBC 코드를 통해 실행됩니다. 하지만 우리는 최대 절전 모드를 통해 호출 할 때 그것은 어떤 식 으로든 sqlstatus = 2를 찾기 때문에 @@ sqlstatus! = 2 조건 검사에서 실패합니다. 저장 프로 시저가 최대 절전 모드를 통해 호출 될 때 저장 프로 시저에서 디버깅 문을 거의 사용하지 않았지만 결과 집합을 sqlstatus = 2로 트래버스하므로 저장 프로 시저가 null을 반환합니다.

우리는 sybase ASE 15.7, hibernate 4.1 버전을 사용하고 있습니다.

문제의 원인을 알려주십시오.

답변

0

커서가 @@ sqlstatus = 2에 도달하는 것은 당연한데 결과 집합의 끝을 나타내며 일반적으로 커서는 해당 조건이 발생할 때까지 읽습니다. 정확히 이것이 한 시나리오에서 일어나는 이유와 다른 시나리오에서 일어나는 것이 아닌 이유는 여기에있는 누구도 알아낼 수 없을 것입니다. 데이터가 다르다는 점에 차이가있을 수 있습니다 (시나리오 중 하나에 열린 트랜잭션이 있습니까?) 또는 다른 것입니다. 당신은 SQL 코드의 일부 디버깅을해야 할 것 같습니다.