다음을 통해 공유


SQLSTATE

SQLSTATE는 경고 또는 오류의 원인에 대한 자세한 정보를 제공합니다. 이 설명서의 SQLSTATE는 ISO/IEF CLI 사양에 있는 SQLSTATE를 기반으로 하지만 IM으로 시작하는 SQLSTATE는 ODBC와 관련이 있습니다.

반환 코드와 달리 이 설명서의 SQLSTATE는 지침이며 드라이버는 반환할 필요가 없습니다. 따라서 드라이버는 감지할 수 있는 오류 또는 경고에 대해 적절한 SQLSTATE를 반환해야 하지만 애플리케이션은 항상 발생하는 오류에 의존해서는 안 됩니다. 이 상황의 이유는 두 가지입니다.

  • 불완전성 이 수동에는 많은 오류와 경고 및 이러한 오류 및 경고에 대한 가능한 원인이 나열되어 있지만 완료되지 않으며 절대 그렇지 않을 수 있습니다. 드라이버 구현은 너무 다양합니다. 지정된 드라이버는 이 설명서에 나열된 모든 SQLSTATE를 반환하지 않으며 이 설명서에 나열되지 않은 SQLSTATE를 반환할 수 있습니다.

  • 복잡성 일부 데이터베이스 엔진( 특히 관계형 데이터베이스 엔진)은 말 그대로 수천 개의 오류와 경고를 반환합니다. 이러한 엔진의 드라이버는 관련된 노력, 매핑의 비활성, 결과 코드의 큰 크기 및 결과 코드의 낮은 값으로 인해 이러한 모든 오류와 경고를 SQLSTATE에 매핑할 가능성이 낮으며, 런타임에 발생해서는 안 되는 프로그래밍 오류를 반환하는 경우가 많습니다. 따라서 드라이버는 합리적인 것처럼 보이는 만큼 많은 오류와 경고를 매핑해야 하며 SQLSTATE 01004(데이터가 잘린 경우)와 같이 애플리케이션 논리의 기반이 될 수 있는 오류 및 경고를 매핑해야 합니다.

SQLSTATE는 안정적으로 반환되지 않으므로 대부분의 애플리케이션은 발생한 특정 오류 또는 경고 및 기본 오류 코드에 맞게 조정되는 관련 진단 메시지와 함께 사용자에게 표시합니다. 애플리케이션이 대부분의 SQLSTATE에서 프로그래밍 논리를 기반으로 할 수 없으므로 이 작업을 수행하는 데 기능이 손실되는 경우는 거의 없습니다. 예를 들어 SQLExecDirect가 SQLSTATE 42000(구문 오류 또는 액세스 위반)을 반환한다고 가정합니다. 이 오류를 발생시킨 SQL 문이 애플리케이션에서 하드 코딩되거나 빌드된 경우 이는 프로그래밍 오류이며 코드를 수정해야 합니다. 사용자가 SQL 문을 입력하는 경우 이는 사용자 오류이며 애플리케이션은 사용자에게 문제를 알려 가능한 모든 작업을 수행했습니다.

애플리케이션이 SQLSTATE에서 기본 프로그래밍 논리를 수행하는 경우 SQLSTATE가 반환되지 않거나 다른 SQLSTATE를 반환할 수 있도록 준비해야 합니다. 정확히 어떤 SQLSTATE가 안정적으로 반환되는지는 수많은 드라이버에 대한 경험만을 기반으로 할 수 있습니다. 그러나 일반적인 지침은 데이터 원본과 달리 드라이버 또는 드라이버 관리자에서 발생하는 오류에 대한 SQLSTATE가 안정적으로 반환될 가능성이 더 높다는 것입니다. 예를 들어 대부분의 드라이버는 SQLSTATE HYC00(선택적 기능이 구현되지 않음)을 반환하는 반면, SQLSTATE 42021(열이 이미 있음)을 반환하는 드라이버는 적을 수 있습니다.

다음 SQLSTATE는 런타임 오류 또는 경고를 나타내며 프로그래밍 논리를 기반으로 하는 좋은 후보입니다. 그러나 모든 드라이버가 반환된다는 보장은 없습니다.

  • 01004(잘린 데이터)

  • 01S02(옵션 값이 변경됨)

  • HY008(작업이 취소됨)

  • HYC00(선택적 기능이 구현되지 않음)

  • HYT00(제한 시간 만료)

SQLSTATE HYC00(구현되지 않은 선택적 기능)은 드라이버가 특정 문 또는 연결 특성을 지원하는지 여부를 애플리케이션에서 확인할 수 있는 유일한 방법이기 때문에 특히 중요합니다.

SQLSTATE의 전체 목록과 이를 반환하는 함수는 부록 A: ODBC 오류 코드를 참조 하세요. 각 함수가 특정 SQLSTATE를 반환할 수 있는 조건에 대한 자세한 설명은 해당 함수를 참조하세요.