CLI 용 SQLSTATES
SQLSTATES는 5자 (바이트) 의 영숫자 문자열이며 형식은
ccsss입니다. 여기서 cc 는 클래스를 표시하고 sss 는 서브클래스를 표시합니다.SQLSTATE에 다음과 같은 클래스가 있습니다.
- '01'. 경고입니다.
- 'HY' 는 CLI 또는 ODBC 드라이버에 의해 생성됩니다.
- 'IM'. ODBC 드라이버 관리자에서 생성합니다.
참고: 버전 5이전의 CLI 버전은 'HY' 가 아닌 'S1' 클래스가 있는 SQLSTATE를 리턴했습니다. CLI 드라이버가 'S1' SQLSTATE를 리턴하도록 강제 실행하려면 애플리케이션이 환경 속성 SQL_ATTR_ODBC_VERSION을 SQL_OV_ODBC2값으로 설정해야 합니다.
CLI SQLSTATE에는 데이터베이스 서버에서 리턴되는 추가 IBM 정의 SQLSTATE및 ODBC 버전 3및 ISO SQL/CLI 스펙에 정의되지 않은 조건에 대한 CLI 정의 SQLSTATE가 모두 포함됩니다. 이 경우 최대 진단 정보 수가 리턴됩니다. ODBC 환경에서 애플리케이션을 실행할 때 ODBC 정의 SQLSTATE도 수신할 수 있습니다.
애플리케이션에서 SQLSTATE를 사용하려면 다음 지침을 따르십시오.
- 진단 정보가 사용 가능한지 판별하기 위해
SQLGetDiagRec()를 호출하기 전에 항상 함수 리턴 코드를 확인하십시오. - 원시(native) 오류 코드가 아닌 SQLSTATE를 사용하십시오.
- 애플리케이션의 이식성을 늘리려면 ODBC 버전 3및 ISO SQL/CLI 스펙에 정의된 CLI SQLSTATE의 서브세트에 대한 종속성만 빌드하고 추가 항목을 정보로만 리턴하십시오. 애플리케이션의
종속성은 특정 SQLSTATE에 기반하는 로직 플로우 의사결정입니다.주: SQLSTATE의 클래스 (처음 두 문자) 에 대한 종속성을 빌드하는 것이 유용할 수 있습니다.
- 최대 진단 정보를 얻기 위해 SQLSTATE와 함께 텍스트 메시지를 리턴합니다 (해당되는 경우, 텍스트 메시지에는 IBM 정의 SQLSTATE도 포함됩니다). 애플리케이션이 오류를 리턴한 함수의 이름을 인쇄해도 유용합니다.
- SQLSTATE에 할당된 문자열에 CLI가 리턴한 널 (NULL) 종료 문자에 대한 스페이스가 포함되어 있는지 확인하십시오.
utilcli.c의 코드 세그먼트는 진단 정보(예:
SQLSTATE)를 검색하고 표시하는 방법을 나타냅니다.void HandleDiagnosticsPrint(SQLSMALLINT htype, /* handle type identifier */
SQLHANDLE hndl /* handle */ )
{
SQLCHAR message[SQL_MAX_MESSAGE_LENGTH + 1];
SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1];
SQLINTEGER sqlcode;
SQLSMALLINT length, i;
i = 1;
/* get multiple field settings of diagnostic record */
while (SQLGetDiagRec(htype,
hndl,
i,
sqlstate,
&sqlcode,
message,
SQL_MAX_MESSAGE_LENGTH + 1,
&length) == SQL_SUCCESS)
{
printf("\n SQLSTATE =
printf(" Native Error Code =
printf("
i++;
}
printf("-------------------------\n");
}CLI/ODBC 추적 기능을 사용하여 발생할 수 있는 오류를 포함하여 애플리케이션이 Db2®를 호출하는 방법을 더 잘 이해할 수 있습니다.