Skip to end of metadata
Go to start of metadata

 

개요


애플리케이션에서 statement 를 핸들링할 때 이미 open 되어 있는 커서를 다시 재사용할 때 발생하는 에러입니다. 

 

 


버전


ALTIBASE HDB 4 이상

HDB 4.3.9 Error Message 매뉴얼이나 altierr 유틸리티로 Invalid cursor state. 에 대한 설명을 확인할 수는 없지만 HDB 4.3.9 에서도 이 에러가 발생할 수 있습니다. 




현상


  • APRE(또는 SESC)에서 CURSOR FETCH 중 CURSOR DECLARE 또는 CURSOR OPEN 수행 시 Invalid cursor state 발생.
  • APRE(또는 SESC)에서 CURSOR FETCH 후 CURSOR DECLARE 또는 CURSOR OPEN 수행 시 Invalid cursor state 발생.
  • SQLCLI 또는 ODBC에서 SQLFetch() 수행 중 SQLExecute(), SQLPrepare(), SQLExecDirect() 중 한 가지 수행 시 Invalid cursor state 발생.
  • SQLCLI 또는 ODBC에서 SQLFetch() 수행 후 SQLExecute(), SQLPrepare(), SQLExecDirect() 중 한 가지 수행 시 Invalid cursor state 발생.

 

 

원인 및 조치


1. FETCH 완료 후 커서 CLOSE 하지 않고 같은 이름의 커서를 재사용한 경우

  • HDB 5 이상 버전에 해당하는 내용입니다. HDB 4 버전에서는 이와 같은 경우 에러가 발생하지 않습니다. 

  • 간혹 커서 CLOSE 를 수행하지 않고 같은 이름의 커서를 재사용하여 에러가 발생하는 경우도 있습니다. 
  • 예제 코드

  • 이 원인에 해당하는 경우 커서 CLOSE 구문을 추가합니다. 

2. FETCH 완료 후 커서 CLOSE 실패 시 예외 처리를 누락한 경우

  • 커서 CLOSE  가 실패했는데 예외 처리를 하지 않아서 커서 CLOSE 실패 사실을 모르고 같은 이름의 커서를 재사용하는 경우입니다. 
  • HDB 5 이상 버전에 해당하는 내용입니다. HDB 4 버전에서는 이와 같은 경우 에러가 발생하지 않습니다. 
  • 예제 코드 

  • 이 원인에 해당하는 경우 커서 CLOSE 구문에 예외 처리를 추가하고 커서 CLOSE 가 실패한 원인이 무엇인지 파악합니다. 

3. FETCH 할 데이터가 결과가 남아 있는 상태에서 커서를 재사용한 경우 

  • DB 서버에 FETCH 할 데이터가 남아있는 경우 커서 CLOSE 할 때 그 결과가  삭제해버립니다.
    다시 말하면 FETCH 할 데이터가 삭제되기 전까지는 같은 이름의 커서를 재사용할 수 없습니다. 재사용하려 한다면 커서를 OPEN 후에 FETCH 해야 함.
  • 예제 코드

    예제1
    예제2
  • 이 원인에 해당하는 경우 커서 CLOSE 구문을 추가 후 커서를 재사용하도록 합니다. 

 

  • No labels