Share via


SQLGetFunctions 함수

규칙
버전 소개: ODBC 1.0 표준 준수: ISO 92

요약
SQLGetFunctions 는 드라이버가 특정 ODBC 함수를 지원하는지 여부에 대한 정보를 반환합니다. 이 함수는 드라이버 관리자에서 구현됩니다. 드라이버에서 구현할 수도 있습니다. 드라이버가 SQLGetFunctions를 구현하는 경우 드라이버 관리자는 드라이버의 함수를 호출합니다. 그렇지 않으면 함수 자체를 실행합니다.

구문

  
SQLRETURN SQLGetFunctions(  
     SQLHDBC           ConnectionHandle,  
     SQLUSMALLINT      FunctionId,  
     SQLUSMALLINT *    SupportedPtr);  

인수

ConnectionHandle
[Input] 연결 핸들입니다.

Functionid
[입력] 관심 있는 ODBC 함수를 식별하는 #define 값입니다.SQL_API_ODBC3_ALL_FUNCTIONS orSQL_API_ALL_FUNCTIONS. SQL_API_ODBC3_ALL_FUNCTIONS ODBC 3*.x* 애플리케이션에서 ODBC 3*.x* 및 이전 함수의 지원을 결정하는 데 사용됩니다. SQL_API_ALL_FUNCTIONS ODBC 2*.x* 애플리케이션에서 ODBC 2*.x* 및 이전 함수의 지원을 결정하는 데 사용됩니다.

ODBC 함수를 식별하는 #define 값 목록은 "주석"의 테이블을 참조하세요.

SupportedPtr
[출력] FunctionId가 단일 ODBC 함수를 식별하는 경우 SupportedPtr는 지정된 함수가 드라이버에서 지원되는 경우 SQL_TRUE 단일 SQLUSMALLINT 값을 가리키고 지원되지 않는 경우 SQL_FALSE.

FunctionId가 SQL_API_ODBC3_ALL_FUNCTIONS 경우 SupportedPtr는 여러 요소가 SQL_API_ODBC3_ALL_FUNCTIONS_SIZE 동일한 SQLSMALLINT 배열을 가리킵니다. 이 배열은 드라이버 관리자에서 ODBC 3*.x* 또는 이전 함수가 지원되는지 여부를 확인하는 데 사용할 수 있는 4,000비트 비트맵으로 처리됩니다. 함수 지원을 확인하기 위해 SQL_FUNC_EXISTS 매크로가 호출됩니다. ("주석"을 참조하세요.) ODBC 3*.x* 애플리케이션은 ODBC 3*.x* 또는 ODBC 2*.x* 드라이버에 대해 SQL_API_ODBC3_ALL_FUNCTIONS SQLGetFunctions를 호출할 수 있습니다.

FunctionId가 SQL_API_ALL_FUNCTIONS 경우 SupportedPtr는 100개 요소의 SQLUSMALLINT 배열을 가리킵니다. 배열은 FunctionId에서 각 ODBC 함수를 식별하는 데 사용하는 #define 값으로 인덱싱됩니다. 배열의 일부 요소는 사용되지 않고 나중에 사용하도록 예약됩니다. 요소가 드라이버에서 지원하는 ODBC 2*.x* 또는 이전 함수를 식별하는 경우 SQL_TRUE. 드라이버에서 지원하지 않는 ODBC 함수를 식별하거나 ODBC 함수를 식별하지 않는 경우 SQL_FALSE.

*SupportedPtr 에서 반환된 배열은 0부터 시작하는 인덱싱을 사용합니다.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR 또는 SQL_INVALID_HANDLE.

진단

SQLGetFunctions가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_DBC HandleType ConnectionHandle 핸들을 사용하여 SQLGetDiagRec 를 호출하여 관련 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 SQLGetFunctions에서 일반적으로 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각 값을 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.

SQLSTATE Error 설명
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
08S01 통신 링크 실패 드라이버와 드라이버가 연결된 데이터 원본 간의 통신 링크는 함수가 처리를 완료하기 전에 실패했습니다.
HY000 일반 오류 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY010 함수 시퀀스 오류 (DM) SQLGetFunctions는 SQLConnect, SQLBrowseConnect 또는 SQLDriverConnect 전에 호출되었습니다.

(DM) CONNECTIONHandle에 대해 SQLBrowseConnect호출되고 SQL_NEED_DATA 반환되었습니다. 이 함수는 SQLBrowseConnect가 SQL_SUCCESS_WITH_INFO 또는 SQL_SUCCESS 반환하기 전에 호출되었습니다.

(DM) SQLExecute, SQLExecDirect 또는 SQLMoreResults가 ConnectionHandle에 대해 호출되고 SQL_PARAM_DATA_AVAILABLE 반환되었습니다. 이 함수는 모든 스트리밍된 매개 변수에 대해 데이터를 검색하기 전에 호출되었습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다.
HY095 함수 형식이 범위를 벗어났습니다. (DM) 잘못된 FunctionId 값이 지정되었습니다.
HY117 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다.

주석

SQLGetFunctions는 항상 SQLGetFunctions, SQLDataSourcesSQLDriver가 지원된다는 것을 반환합니다. 이러한 함수는 드라이버 관리자에서 구현되기 때문에 이 작업을 수행합니다. 드라이버 관리자는 유니코드 함수가 있는 경우 ANSI 함수를 해당 유니코드 함수에 매핑하고 ANSI 함수가 있는 경우 유니코드 함수를 해당 ANSI 함수에 매핑합니다. 애플리케이션에서 SQLGetFunctions를 사용하는 방법에 대한 자세한 내용은 인터페이스 규칙 수준을 참조하세요.

다음은 ISO 92 표준 준수 수준을 준수하는 함수의 FunctionId에 대한 유효한 값 목록입니다.

FunctionId 값 FunctionId 값
SQL_API_SQLALLOCHANDLE SQL_API_SQLGETDESCFIELD
SQL_API_SQLBINDCOL SQL_API_SQLGETDESCREC
SQL_API_SQLCANCEL SQL_API_SQLGETDIAGFIELD
SQL_API_SQLCLOSECURSOR SQL_API_SQLGETDIAGREC
SQL_API_SQLCOLATTRIBUTE SQL_API_SQLGETENVATTR
SQL_API_SQLCONNECT SQL_API_SQLGETFUNCTIONS
SQL_API_SQLCOPYDESC SQL_API_SQLGETINFO
SQL_API_SQLDATASOURCES SQL_API_SQLGETSTMTATTR
SQL_API_SQLDESCRIBECOL SQL_API_SQLGETTYPEINFO
SQL_API_SQLDISCONNECT SQL_API_SQLNUMRESULTCOLS
SQL_API_SQLDRIVERS SQL_API_SQLPARAMDATA
SQL_API_SQLENDTRAN SQL_API_SQLPREPARE
SQL_API_SQLEXECDIRECT SQL_API_SQLPUTDATA
SQL_API_SQLEXECUTE SQL_API_SQLROWCOUNT
SQL_API_SQLFETCH SQL_API_SQLSETCONNECTATTR
SQL_API_SQLFETCHSCROLL SQL_API_SQLSETCURSORNAME
SQL_API_SQLFREEHANDLE SQL_API_SQLSETDESCFIELD
SQL_API_SQLFREESTMT SQL_API_SQLSETDESCREC
SQL_API_SQLGETCONNECTATTR SQL_API_SQLSETENVATTR
SQL_API_SQLGETCURSORNAME SQL_API_SQLSETSTMTATTR
SQL_API_SQLGETDATA

다음은 Open Group 표준 준수 수준을 준수하는 함수의 FunctionId에 대한 유효한 값 목록입니다.

FunctionId 값 FunctionId 값
SQL_API_SQLCOLUMNS SQL_API_SQLSTATISTICS
SQL_API_SQLSPECIALCOLUMNS SQL_API_SQLTABLES

다음은 ODBC 표준 준수 수준을 준수하는 함수의 FunctionId에 대한 유효한 값 목록입니다.

FunctionId 값 FunctionId 값
SQL_API_SQLBINDPARAMETER SQL_API_SQLNATIVESQL
SQL_API_SQLBROWSECONNECT SQL_API_SQLNUMPARAMS
SQL_API_SQLBULKOPERATIONS[1] SQL_API_SQLPRIMARYKEYS
SQL_API_SQLCOLUMNPRIVILEGES SQL_API_SQLPROCEDURECOLUMNS
SQL_API_SQLDESCRIBEPARAM SQL_API_SQLPROCEDURES
SQL_API_SQLDRIVERCONNECT SQL_API_SQLSETPOS
SQL_API_SQLFOREIGNKEYS SQL_API_SQLTABLEPRIVILEGES
SQL_API_SQLMORERESULTS

[1] ODBC 2*.x* 드라이버로 작업할 때 SQLBulkOperations는 두 드라이버가 모두 true인 경우에만 지원되는 것으로 반환됩니다. ODBC 2*.x* 드라이버는 SQLSetPos를 지원하고 SQL_POS_OPERATIONS 정보 형식은 SQL_POS_ADD 비트를 집합으로 반환합니다.

다음은 ODBC 3.8 이상에서 도입된 함수의 FunctionId에 대한 유효한 값 목록입니다.

FunctionId 값
SQL_API_SQLCANCELHANDLE [2]

[2] 드라이버가 SQLCancel 및 SQLCancelHandle을 모두 지원하는 경우에만 SQLCancelHandle이 지원되는 대로 반환됩니다. SQLCancel이 지원되지만 SQLCancelHandle이 아닌 경우 애플리케이션은 SQLCancel에 매핑되므로 문 핸들에서 SQLCancelHandle을 계속 호출수 있습니다.

SQL_FUNC_EXISTS 매크로

SQL_FUNC_EXISTS(SupportedPtr, FunctionID) 매크로는 SQL_API_ODBC3_ALL_FUNCTIONS FunctionId 인수를 사용하여 SQLGetFunctions를 호출한 후 ODBC 3*.x* 또는 이전 함수의 지원을 확인하는 데 사용됩니다. 애플리케이션은 SQLGetFunctions에 전달된 SupportedPtr설정된 SupportedPtr 인수와 함수의 #define 설정된 FunctionID 인수를 사용하여 SQL_FUNC_EXISTS 호출합니다. SQL_FUNC_EXISTS 함수가 지원되면 SQL_TRUE 반환하고, 그렇지 않으면 SQL_FALSE.

참고 항목

ODBC 2*.x* 드라이버로 작업하는 경우 SQLAllocHandle이 SQLAllocEnv, SQLAllocConnect 또는 SQLAllocStmt에 매핑되고 SQLFreeHandle이 SQLFreeEnv, SQLFreeConnect 또는 SQLFreeStmt에 매핑되므로 ODBC 3*.x* 드라이버 관리자는 SQLAllocHandle 및 SQLFreeHandle에 대한 SQL_TRUE 반환합니다. 그러나 이 경우 매핑할 ODBC 2*.x* 함수가 없으므로 함수에 대해 SQL_TRUE 반환되더라도 SQL_HANDLE_DESC HandleType 인수가 있는 SQLAllocHandle 또는 SQLFreeHandle은 지원되지 않습니다.

코드 예

다음 세 가지 예제에서는 애플리케이션이 SQLGetFunctions를 사용하여 드라이버가 SQLTables, SQLColumnsSQLStatistics를 지원하는지 확인하는 방법을 보여 줍니다. 드라이버가 이러한 함수를 지원하지 않는 경우 애플리케이션은 드라이버에서 연결을 끊습니다. 첫 번째 예제에서는 각 함수에 대해 SQLGetFunctions를 한 번 호출 합니다 .

SQLUSMALLINT TablesExists, ColumnsExists, StatisticsExists;  
RETCODE retcodeTables, retcodeColumns, retcodeStatistics  
  
retcodeTables = SQLGetFunctions(hdbc, SQL_API_SQLTABLES, &TablesExists);  
retcodeColumns = SQLGetFunctions(hdbc, SQL_API_SQLCOLUMNS, &ColumnsExists);  
retcodeStatistics = SQLGetFunctions(hdbc, SQL_API_SQLSTATISTICS, &StatisticsExists);  
  
// SQLGetFunctions is completed successfully and SQLTables, SQLColumns, and SQLStatistics are supported by the driver.  
if (retcodeTables == SQL_SUCCESS && TablesExists == SQL_TRUE &&   
retcodeColumns == SQL_SUCCESS && ColumnsExists == SQL_TRUE &&   
retcodeStatistics == SQL_SUCCESS && StatisticsExists == SQL_TRUE)   
{  
  
   // Continue with application  
  
}  
  
SQLDisconnect(hdbc);  

두 번째 예제에서 ODBC 3.x 애플리케이션은 SQLGetFunctions를 호출하고 SQLGetFunctions모든 ODBC 3.x 및 이전 함수에 대한 정보를 반환하는 배열을 전달합니다.

RETCODE retcodeTables, retcodeColumns, retcodeStatistics  
SQLUSMALLINT fExists[SQL_API_ODBC3_ALL_FUNCTIONS_SIZE];  
  
retcode = SQLGetFunctions(hdbc, SQL_API_ODBC3_ALL_FUNCTIONS, fExists);  
  
// SQLGetFunctions is completed successfully and SQLTables, SQLColumns, and SQLStatistics are supported by the driver.  
if (reccode == SQL_SUCCESS &&   
SQL_FUNC_EXISTS(fExists, SQL_API_SQLTABLES) == SQL_TRUE &&  
   SQL_FUNC_EXISTS(fExists, SQL_API_SQLCOLUMNS) == SQL_TRUE &&  
   SQL_FUNC_EXISTS(fExists, SQL_API_SQLSTATISTICS) == SQL_TRUE)   
{  
  
   // Continue with application  
  
}  
  
SQLDisconnect(hdbc);  

세 번째 예제는 ODBC 2.x 애플리케이션이 SQLGetFunctions를 호출하고 SQLGetFunctions가 모든 ODBC 2.x 및 이전 함수에 대한 정보를 반환하는 100개 요소의 배열을 전달하는 것입니다.

#define FUNCTIONS 100  
  
RETCODE retcodeTables, retcodeColumns, retcodeStatistics  
SQLUSMALLINT fExists[FUNCTIONS];  
  
retcode = SQLGetFunctions(hdbc, SQL_API_ALL_FUNCTIONS, fExists);  
  
/* SQLGetFunctions is completed successfully and SQLTables, SQLColumns, and SQLStatistics are supported by the driver. */  
if (retcode == SQL_SUCCESS &&   
fExists[SQL_API_SQLTABLES] == SQL_TRUE &&  
   fExists[SQL_API_SQLCOLUMNS] == SQL_TRUE &&  
   fExists[SQL_API_SQLSTATISTICS] == SQL_TRUE)   
{  
  
   /* Continue with application */  
  
}  
  
SQLDisconnect(hdbc);  
추가 정보 참조
연결 특성 설정 반환 SQLGetConnectAttr 함수
드라이버 또는 데이터 원본에 대한 정보 반환 SQLGetInfo 함수
문 특성의 설정 반환 SQLGetStmtAttr 함수

참고 항목

ODBC API 참조
ODBC 헤더 파일