SQLGetDiagField 함수

규칙
도입된 버전: ODBC 3.0 표준 준수: ISO 92

요약
SQLGetDiagField 는 오류, 경고 및 상태 정보를 포함하는 진단 데이터 구조(지정된 핸들과 연결됨)의 레코드 필드의 현재 값을 반환합니다.

구문


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

인수

HandleType
[입력] 진단이 필요한 핸들의 형식을 설명하는 핸들 형식 식별자입니다. 다음 중 하나여야 합니다.

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN 핸들은 드라이버 관리자 및 드라이버에서만 사용됩니다. 애플리케이션은 이 핸들 형식을 사용하면 안 됩니다. SQL_HANDLE_DBC_INFO_TOKEN 대한 자세한 내용은 ODBC 드라이버에서 연결 풀 인식 개발을 참조 하세요.

Handle
[입력] HandleType으로 표시된 형식의 진단 데이터 구조에 대한 핸들입니다. HandleType이 SQL_HANDLE_ENV 경우 핸들은 공유 또는 공유되지 않은 환경 핸들일 수 있습니다.

RecNumber
[입력] 애플리케이션에서 정보를 검색하는 상태 레코드를 나타냅니다. 상태 레코드는 1부터 번호가 매겨집니다. DiagIdentifier 인수가 진단 헤더의 필드를 나타내는 경우 RecNumber는 무시됩니다. 그렇지 않은 경우 0을 초과해야 합니다.

DiagIdentifier
[입력] 값을 반환할 진단 필드를 나타냅니다. 자세한 내용은 "Comments"의 "DiagIdentifier 인수" 섹션을 참조하세요.

DiagInfoPtr
[출력] 진단 정보를 반환할 버퍼에 대한 포인터입니다. 데이터 형식은 DiagIdentifier값에 따라 달라집니다. DiagInfoPtr이 정수 형식인 경우 애플리케이션은 SQLULEN 버퍼를 사용하고 이 함수를 호출하기 전에 값을 0으로 초기화해야 합니다. 일부 드라이버는 버퍼의 하위 32비트 또는 16비트만 쓰고 상위 순서 비트는 변경되지 않은 상태로 둘 수 있습니다.

DiagInfoPtr이 NULL인 경우 StringLengthPtr은 DiagInfoPtr이 가리키는 버퍼에서 반환할 수 있는 총 바이트 수(문자 데이터의 null 종료 문자 제외)를 여전히 반환합니다.

BufferLength
[입력] DiagIdentifier가 ODBC 정의 진단이고 DiagInfoPtr가 문자열 또는 이진 버퍼를 가리키는 경우 이 인수는 *DiagInfoPtr의 길이여야 합니다. DiagIdentifier가 ODBC 정의 필드이고 *DiagInfoPtr이 정수이면 BufferLength가 무시됩니다. *DiagInfoPtr의 값이 유니코드 문자열인 경우(SQLGetDiagFieldW를 호출할 때) BufferLength 인수는 짝수여야 합니다.

DiagIdentifier가 드라이버 정의 필드인 경우 애플리케이션은 BufferLength 인수를 설정하여 드라이버 관리자에 대한 필드의 특성을 나타냅니다. BufferLength 는 다음 값을 가질 수 있습니다.

  • DiagInfoPtr이 문자열에 대한 포인터인 경우 BufferLength는 문자열 또는 SQL_NTS 길이입니다.

  • DiagInfoPtr이 이진 버퍼에 대한 포인터인 경우 애플리케이션은 bufferLength에 SQL_LEN_BINARY_ATTR(길이) 매크로의 결과를 배치합니다. 그러면 BufferLength에 음수 값이 배치됩니다.

  • DiagInfoPtr이 문자열이나 이진 문자열이 아닌 값에 대한 포인터인 경우 BufferLength에는 SQL_IS_POINTER 값이 있어야 합니다.

  • *DiagInfoPtr에 고정 길이 데이터 형식이 포함된 경우 BufferLength는 적절하게 SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT 또는 SQL_IS_USMALLINT.

StringLengthPtr
[출력] *DiagInfoPtr에서 문자 데이터에 대해 반환하는 데 사용할 수 있는 총 바이트 수(null 종료 문자에 필요한 바이트 수 제외)를 반환하는 버퍼에 대한 포인터입니다. 반환할 수 있는 바이트 수가 BufferLength보다 크거나 같으면 *DiagInfoPtr의 텍스트가 BufferLength에서 null 종료 문자의 길이를 뺀 값으로 잘립니다.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE 또는 SQL_NO_DATA.

진단

SQLGetDiagField 는 진단 레코드 자체를 게시하지 않습니다. 다음 반환 값을 사용하여 자체 실행 결과를 보고합니다.

  • SQL_SUCCESS: 함수가 진단 정보를 반환했습니다.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr 이 너무 작아서 요청된 진단 필드를 보유할 수 없습니다. 따라서 진단 필드의 데이터가 잘렸습니다. 잘림이 발생했는지 확인하려면 애플리케이션이 BufferLength를 *StringLengthPtr에 기록된 사용 가능한 실제 바이트 수와 비교해야 합니다.

  • SQL_INVALID_HANDLE: HandleTypeHandle으로 표시된 핸들이 유효한 핸들이 아닙니다.

  • SQL_ERROR: 다음 중 하나가 발생했습니다.

    • DiagIdentifier 인수가 유효한 값 중 하나가 아닙니다.

    • DiagIdentifier 인수는 SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE 또는 SQL_DIAG_ROW_COUNT이었지만 Handle 은 문 핸들이 아니었습니다. (드라이버 관리자는 이 진단을 반환합니다.)

    • DiagIdentifier가 진단 레코드의 필드를 표시한 경우 RecNumber 인수는 음수이거나 0입니다. 머리글 필드에 대해서는 RecNumber 가 무시됩니다.

    • 요청된 값은 문자열이고 BufferLength 는 0보다 작습니다.

    • 비동기 알림을 사용하는 경우 핸들의 비동기 작업이 완료되지 않았습니다.

  • SQL_NO_DATA: RecNumber가 Handle지정된 핸들에 대해 존재했던 진단 레코드 수보다 큰 경우 또한 Handle에 대한 진단 레코드가 없는 경우 함수는 양수 RecNumber에 대한 SQL_NO_DATA 반환합니다.

주석

애플리케이션은 일반적으로 SQLGetDiagField를 호출하여 다음 세 가지 목표 중 하나를 수행합니다.

  1. 함수 호출이 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO(또는 SQLBrowseConnect 함수에 대한 SQL_NEED_DATA)를 반환할 때 특정 오류 또는 경고 정보를 가져옵니다.

  2. SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos(SQL_DIAG_ROW_COUNT 헤더 필드)를 호출하여 삽입, 삭제 또는 업데이트 작업을 수행할 때 영향을 받은 데이터 원본의 행 수를 확인하거나 드라이버가 SQL_DIAG_CURSOR_ROW_COUNT 헤더 필드에서 이 정보를 제공할 수 있는 경우 현재 열려 있는 커서에 있는 행 수를 확인합니다.

  3. SQLExecDirect 또는 SQLExecute(SQL_DIAG_DYNAMIC_FUNCTION 및 SQL_DIAG_DYNAMIC_FUNCTION_CODE 헤더 필드)에 대한 호출로 실행된 함수를 확인합니다.

모든 ODBC 함수는 호출할 때마다 0개 이상의 진단 레코드를 게시할 수 있으므로 애플리케이션은 ODBC 함수 호출 후 SQLGetDiagField를 호출할 수 있습니다. 한 번에 저장할 수 있는 진단 레코드 수에는 제한이 없습니다. SQLGetDiagField는 Handle 인수에 지정된 진단 데이터 구조와 가장 최근에 연결된 진단 정보만 검색합니다. 애플리케이션이 SQLGetDiagField 또는 SQLGetDiagRec 이외의 ODBC 함수를 호출하는 경우 동일한 핸들을 가진 이전 호출의 진단 정보가 손실됩니다.

SQLGetDiagField가 SQL_SUCCESS 반환하는 한 애플리케이션은 RecNumber를 증가시켜 모든 진단 레코드를 검색할 수 있습니다. 상태 레코드 수는 SQL_DIAG_NUMBER 헤더 필드에 표시됩니다. SQLGetDiagField에 대한 호출은 헤더 및 레코드 필드에 대한 비동기적입니다. 진단 함수 이외의 함수가 중간에 호출되지 않았으므로 동일한 핸들에 레코드를 게시하는 경우 애플리케이션은 나중에 SQLGetDiagField를 다시 호출하여 레코드에서 필드를 검색할 수 있습니다.

애플리케이션은 SQLGetDiagField를 호출하여 SQL_DIAG_CURSOR_ROW_COUNT 또는 SQL_DIAG_ROW_COUNT 제외하고 언제든지 진단 필드를 반환할 수 있으며, Handle이 문 핸들이 아닌 경우 SQL_ERROR 반환합니다. 다른 진단 필드가 정의되지 않은 경우 SQLGetDiagField 호출은 SQL_SUCCESS 반환하고(다른 진단이 발생하지 않는 경우) 필드에 대해 정의되지 않은 값이 반환됩니다.

자세한 내용은 SQLGetDiagRec 및 SQLGetDiagField 사용 및 SQLGetDiagRec 및 SQLGetDiagField 구현을 참조하세요.

비동기적으로 실행되는 API 이외의 API를 호출하면 HY010 "함수 시퀀스 오류"가 생성됩니다. 그러나 비동기 작업이 완료되기 전에는 오류 레코드를 검색할 수 없습니다.

HandleType 인수

각 핸들 형식에는 연결된 진단 정보가 있을 수 있습니다. HandleType 인수는 Handle의 핸들 형식을 나타냅니다.

환경, 연결, 문 및 설명자 핸들에는 일부 헤더 및 레코드 필드를 반환할 수 없습니다. 필드를 적용할 수 없는 핸들은 다음 "머리글 필드" 및 "레코드 필드" 섹션에 표시됩니다.

HandleType이 SQL_HANDLE_ENV 경우 핸들은 공유 또는 공유되지 않은 환경 핸들일 수 있습니다.

드라이버별 헤더 진단 필드는 환경 핸들과 연결해서는 안 됩니다.

설명자 핸들에 대해 정의된 유일한 진단 헤더 필드는 SQL_DIAG_NUMBER SQL_DIAG_RETURNCODE.

DiagIdentifier 인수

이 인수는 진단 데이터 구조에서 필요한 필드의 식별자를 나타냅니다. RecNumber가 1보다 크거나 같은 경우 필드의 데이터는 함수에서 반환된 진단 정보를 설명합니다. RecNumber가 0이면 필드가 진단 데이터 구조의 헤더에 있으므로 특정 정보가 아니라 진단 정보를 반환한 함수 호출과 관련된 데이터가 포함됩니다.

드라이버는 진단 데이터 구조에서 드라이버별 헤더 및 레코드 필드를 정의할 수 있습니다.

ODBC 2*.x* 드라이버로 작동하는 ODBC 3*.x* 애플리케이션은 SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME 또는 SQL_DIAG_SQLSTATE DiagIdentifier 인수로만 SQLGetDiagField를 호출할 수 있습니다. 다른 모든 진단 필드는 SQL_ERROR 반환합니다.

머리글 필드

다음 표에 나열된 헤더 필드는 DiagIdentifier 인수에 포함될 수 있습니다.

DiagIdentifier 반환 형식 반품
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN 이 필드에는 커서의 행 수가 포함됩니다. 의미 체계는 SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 및 SQL_STATIC_CURSOR_ATTRIBUTES2 SQLGetInfo 정보 형식에 따라 달라지며, 이는 각 커서 형식(SQL_CA2_CRC_EXACT 및 SQL_CA2_CRC_APPROXIMATE 비트)에 사용할 수 있는 행 수를 나타냅니다.

이 필드의 내용은 문 핸들에 대해서만 정의되며 SQLExecute, SQLExecDirect 또는 SQLMoreResults가 호출된 후에만 정의됩니다. 문 핸들 이외의 SQL_DIAG_CURSOR_ROW_COUNT DiagIdentifierSQLGetDiagField를 호출하면 SQL_ERROR 반환됩니다.
SQL_DIAG_DYNAMIC_FUNCTION Sqlchar* 기본 함수가 실행한 SQL 문을 설명하는 문자열입니다. (특정 값은 이 섹션의 뒷부분에 있는 "동적 함수 필드의 값"을 참조하세요.) 이 필드의 내용은 문 핸들에 대해서만 정의되며 SQLExecute, SQLExecDirect 또는 SQLMoreResults를 호출한 후에만 정의됩니다. 문 핸들 이외의 SQL_DIAG_DYNAMIC_FUNCTION DiagIdentifierSQLGetDiagField를 호출하면 SQL_ERROR 반환됩니다. 이 필드의 값은 SQLExecute 또는 SQLExecDirect를 호출하기 전에 정의되지 않습니다.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER 이 코드는 기본 함수에 의해 실행된 SQL 문을 설명하는 숫자 코드입니다. (특정 값은 이 섹션의 뒷부분에 있는 "동적 함수 필드의 값"을 참조하세요.) 이 필드의 내용은 문 핸들에 대해서만 정의되며 SQLExecute, SQLExecDirect 또는 SQLMoreResults를 호출한 후에만 정의됩니다. 문 핸들 이외의 SQL_DIAG_DYNAMIC_FUNCTION_CODE DiagIdentifierSQLGetDiagField를 호출하면 SQL_ERROR 반환됩니다. 이 필드의 값은 SQLExecute 또는 SQLExecDirect를 호출하기 전에 정의되지 않습니다.
SQL_DIAG_NUMBER SQLINTEGER 지정된 핸들에 사용할 수 있는 상태 레코드의 수입니다.
SQL_DIAG_RETURNCODE SQLRETURN 함수에서 반환된 코드를 반환합니다. 반환 코드 목록은 반환 코드를 참조 하세요. 드라이버는 SQL_DIAG_RETURNCODE; 를 구현할 필요가 없습니다. 항상 드라이버 관리자에 의해 구현됩니다. Handle에서 아직 호출된 함수가 없으면 SQL_DIAG_RETURNCODE 대해 SQL_SUCCESS 반환됩니다.
SQL_DIAG_ROW_COUNT SQLLEN SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos에서 수행하는 삽입, 삭제 또는 업데이트의 영향을 받는 행 수입니다. 커서 사양실행된 후 드라이버 정의입니다. 이 필드의 내용은 문 핸들에 대해서만 정의됩니다. 문 핸들 이외의 SQL_DIAG_ROW_COUNT DiagIdentifier사용하여 SQLGetDiagField를 호출하면 SQL_ERROR 반환됩니다. 이 필드의 데이터는 SQLRowCount의 RowCountPtr 인수에도 반환됩니다. 이 필드의 데이터는 진단되지 않는 모든 함수 호출 후에 다시 설정되지만 SQLRowCount에서 반환된 행 수는 문이 준비되거나 할당된 상태로 다시 설정될 때까지 동일하게 유지됩니다.

레코드 필드

다음 표에 나열된 레코드 필드는 DiagIdentifier 인수에 포함될 수 있습니다.

DiagIdentifier 반환 형식 반품
SQL_DIAG_CLASS_ORIGIN Sqlchar* 이 레코드에서 SQLSTATE 값의 클래스 부분을 정의하는 문서를 나타내는 문자열입니다. 해당 값은 Open Group 및 ISO 호출 수준 인터페이스로 정의된 모든 SQLSTATE에 대해 "ISO 9075"입니다. ODBC 관련 SQLSTATE(SQLSTATE 클래스가 "IM"인 모든 SQLSTATE)의 경우 해당 값은 "ODBC 3.0"입니다.
SQL_DIAG_COLUMN_NUMBER SQLINTEGER SQL_DIAG_ROW_NUMBER 필드가 행 집합의 유효한 행 번호 또는 매개 변수 집합인 경우 이 필드에는 결과 집합의 열 번호 또는 매개 변수 집합의 매개 변수 번호를 나타내는 값이 포함됩니다. 결과 집합 열 번호는 항상 1에서 시작합니다. 이 상태 레코드가 책갈피 열과 관련된 경우 필드는 0일 수 있습니다. 매개 변수 번호는 1부터 시작합니다. 상태 레코드가 열 번호 또는 매개 변수 번호와 연결되지 않은 경우 SQL_NO_COLUMN_NUMBER 값이 있습니다. 드라이버에서 이 레코드가 연결된 열 번호 또는 매개 변수 번호를 확인할 수 없는 경우 이 필드에는 SQL_COLUMN_NUMBER_UNKNOWN 값이 있습니다.

이 필드의 내용은 문 핸들에 대해서만 정의됩니다.
SQL_DIAG_CONNECTION_NAME Sqlchar* 진단 레코드와 관련된 연결의 이름을 나타내는 문자열입니다. 이 필드는 드라이버 정의입니다. 환경 핸들과 연결된 진단 데이터 구조 및 연결과 관련이 없는 진단의 경우 이 필드는 길이가 0인 문자열입니다.
SQL_DIAG_MESSAGE_TEXT Sqlchar* 오류 또는 경고에 대한 정보 메시지입니다. 이 필드는 진단 메시지에 설명된 대로 형식이 지정됩니다. 진단 메시지 텍스트의 최대 길이는 없습니다.
SQL_DIAG_NATIVE SQLINTEGER 드라이버/데이터 원본별 네이티브 오류 코드입니다. 네이티브 오류 코드가 없으면 드라이버는 0을 반환합니다.
SQL_DIAG_ROW_NUMBER SQLLEN 이 필드에는 행 집합의 행 번호 또는 상태 레코드가 연결된 매개 변수 집합의 매개 변수 번호가 포함됩니다. 행 번호 및 매개 변수 번호는 1로 시작합니다. 이 상태 레코드가 행 번호 또는 매개 변수 번호와 연결되지 않은 경우 이 필드에는 SQL_NO_ROW_NUMBER 값이 있습니다. 드라이버에서 이 레코드가 연결된 행 번호 또는 매개 변수 번호를 확인할 수 없는 경우 이 필드에는 SQL_ROW_NUMBER_UNKNOWN 값이 있습니다.

이 필드의 내용은 문 핸들에 대해서만 정의됩니다.
SQL_DIAG_SERVER_NAME Sqlchar* 진단 레코드와 관련된 서버 이름을 나타내는 문자열입니다. SQL_DATA_SOURCE_NAME 옵션을 사용하여 SQLGetInfo 호출에 대해 반환된 값과 동일합니다. 환경 핸들과 연결된 진단 데이터 구조 및 서버와 관련이 없는 진단의 경우 이 필드는 길이가 0인 문자열입니다.
SQL_DIAG_SQLSTATE Sqlchar* 5자 SQLSTATE 진단 코드입니다. 자세한 내용은 SQLSTATE를 참조 하세요.
SQL_DIAG_SUBCLASS_ORIGIN Sqlchar* SQL_DIAG_CLASS_ORIGIN 형식과 유효한 값이 동일한 문자열로, SQLSTATE 코드의 서브클래스 부분의 정의 부분을 식별합니다. "ODBC 3.0"이 반환되는 ODBC 관련 SQLSTATES는 다음을 포함합니다.

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

동적 함수 필드의 값

다음 표에서는 SQLExecute 또는 SQLExecDirect 호출에 의해 실행되는 각 유형의 SQL 문에 적용되는 SQL_DIAG_DYNAMIC_FUNCTION 및 SQL_DIAG_DYNAMIC_FUNCTION_CODE 값을 설명합니다. 드라이버는 나열된 값에 드라이버 정의 값을 추가할 수 있습니다.

SQL statement

실행됨
의 값

SQL_DIAG_DYNAMIC_FUNCTION
의 값

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "ALTER DOMAIN" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "ALTER TABLE" SQL_DIAG_ALTER_TABLE
assertion-definition "CREATE ASSERTION" SQL_DIAG_CREATE_ASSERTION
character-set-definition "CREATE CHARACTER SET" SQL_DIAG_CREATE_CHARACTER_SET
데이터 정렬 정의 "데이터 정렬 만들기" SQL_DIAG_CREATE_COLLATION
domainn-definition "CREATE DOMAIN" SQL_DIAG_CREATE_DOMAIN
create-index-statement "CREATE INDEX" SQL_DIAG_CREATE_INDEX
create-table-statement "CREATE TABLE" SQL_DIAG_CREATE_TABLE
create-view-statement "CREATE VIEW" SQL_DIAG_CREATE_VIEW
cursor-specification "SELECT CURSOR" SQL_DIAG_SELECT_CURSOR
delete-statement-positioned "동적 삭제 커서" SQL_DIAG_DYNAMIC_DELETE_CURSOR
delete-statement-searched "DELETE WHERE" SQL_DIAG_DELETE_WHERE
drop-assertion-statement "DROP ASSERTION" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "DROP CHARACTER SET" SQL_DIAG_DROP_CHARACTER_SET
drop-collation-statement "DROP 데이터 정렬" SQL_DIAG_DROP_COLLATION
drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
drop-index-statement "DROP INDEX" SQL_DIAG_DROP_INDEX
drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
drop-view-statement "DROP VIEW" SQL_DIAG_DROP_VIEW
grantstatement "GRANT" SQL_DIAG_GRANT
insert-statement "INSERT" SQL_DIAG_INSERT
ODBC-procedure-extension "CALL" SQL_DIAG_ 통화
revoke-statement "REVOKE" SQL_DIAG_REVOKE
스키마 정의 "CREATE SCHEMA" SQL_DIAG_CREATE_SCHEMA
번역 정의 "번역 만들기" SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "동적 업데이트 커서" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "업데이트 위치" SQL_DIAG_UPDATE_WHERE
알 수 없음 빈 문자열 SQL_DIAG_UNKNOWN_STATEMENT

상태 레코드 시퀀스

상태 레코드는 행 번호 및 진단 유형에 따라 시퀀스에 배치됩니다. 드라이버 관리자는 생성되는 상태 레코드를 반환할 최종 순서를 결정합니다. 드라이버는 생성되는 상태 레코드를 반환할 최종 순서를 결정합니다.

드라이버 관리자와 드라이버 둘 다에서 진단 레코드를 게시하는 경우 드라이버 관리자는 해당 레코드의 순서를 지정합니다.

둘 이상의 상태 레코드가 있는 경우 레코드의 시퀀스는 먼저 행 번호에 따라 결정됩니다. 다음 규칙은 행별 진단 레코드 시퀀스를 결정하는 데 적용됩니다.

  • 행에 해당하지 않는 레코드는 SQL_NO_ROW_NUMBER -1로 정의되기 때문에 특정 행에 해당하는 레코드 앞에 나타납니다.

  • SQL_ROW_NUMBER_UNKNOWN -2로 정의되어 있으므로 행 번호를 알 수 없는 레코드가 다른 모든 레코드 앞에 나타납니다.

  • 특정 행과 관련된 모든 레코드의 경우 레코드는 SQL_DIAG_ROW_NUMBER 필드의 값을 기준으로 정렬됩니다. 영향을 받는 첫 번째 행의 모든 오류 및 경고가 나열된 다음 영향을 받는 다음 행의 모든 오류 및 경고가 표시됩니다.

참고 항목

SQLSTATE 01S01(행 오류)이 ODBC 2*.x* 드라이버에서 반환되거나 SQLSTATE 01인 경우 ODBC 3*.x* 드라이버 관리자는 진단 큐에서 상태 레코드를 정렬하지 않습니다. SQLExtendedFetch가 호출되거나 SQLExtendedFetch를 사용하여 배치된 커서에서 SQLSetPos가 호출될 때 ODBC 3*.x* 드라이버에서 ODBC 3*.x* 드라이버가 S01(행의 오류)을 반환합니다.

각 행 내에서 또는 행 번호에 해당하지 않거나 행 번호를 알 수 없는 모든 레코드 또는 행 번호가 SQL_NO_ROW_NUMBER 같은 모든 레코드에 대해 나열된 첫 번째 레코드는 정렬 규칙 집합을 사용하여 결정됩니다. 첫 번째 레코드 이후 행에 영향을 주는 다른 레코드의 순서는 정의되지 않습니다. 애플리케이션은 오류가 첫 번째 레코드 다음에 경고 앞에 있다고 가정할 수 없습니다. 애플리케이션은 전체 진단 데이터 구조를 검색하여 함수 호출 실패에 대한 전체 정보를 가져와야 합니다.

다음 규칙은 행 내의 첫 번째 레코드를 결정하는 데 사용됩니다. 순위가 가장 높은 레코드는 첫 번째 레코드입니다. 레코드의 원본(드라이버 관리자, 드라이버, 게이트웨이 등)은 레코드 순위 지정 시 고려되지 않습니다.

  • 오류를 설명하는 오류 상태 레코드의 순위가 가장 높습니다. 정렬 오류에 다음 규칙이 적용됩니다.

    • 트랜잭션 실패 또는 가능한 트랜잭션 실패를 나타내는 레코드가 다른 모든 레코드를 능가합니다.

    • 두 개 이상의 레코드가 동일한 오류 조건을 설명하는 경우 Open Group CLI 사양(클래스 03~HZ)에 의해 정의된 SQLSTATE는 ODBC 및 드라이버 정의 SQLSTATE를 능가합니다.

  • 드라이버 정의 No Data 값(클래스 02)을 설명하는 구현 정의 No Data Values Status 레코드에는 두 번째로 높은 순위가 있습니다.

  • 경고를 설명하는 경고 상태 레코드(클래스 01)의 순위가 가장 낮습니다. 두 개 이상의 레코드가 동일한 경고 조건을 설명하는 경우 Open Group CLI 사양으로 정의된 경고 SQLSTATE는 ODBC 정의 및 드라이버 정의 SQLSTATE보다 높습니다.

추가 정보 참조
진단 데이터 구조의 여러 필드 가져오기 SQLGetDiagRec 함수

참고 항목

ODBC API 참조
ODBC 헤더 파일