SQLGetTypeInfo 関数
準拠
導入されたバージョン: ODBC 1.0 標準コンプライアンス: ISO 92
まとめ
SQLGetTypeInfo は、データ ソースでサポートされているデータ型に関する情報を返します。 ドライバーは、SQL 結果セットの形式で情報を返します。 データ型は、データ定義言語 (DDL) ステートメントで使用することを目的としています。
重要
アプリケーションでは、SQLGetTypeInfo
構文
SQLRETURN SQLGetTypeInfo(
SQLHSTMT StatementHandle,
SQLSMALLINT DataType);
引数
StatementHandle
[入力]結果セットのステートメント ハンドル。
DataType
[入力]SQL データ型。 これは、「付録 D: データ型」の「 SQL データ型 」セクションの値のいずれか、またはドライバー固有の SQL データ型である必要があります。 SQL_ALL_TYPESは、すべてのデータ型に関する情報を返す必要があることを指定します。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。
診断
SQLGetTypeInfoがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、SQL_HANDLE_STMTのHandleTypeとStatementHandleのHandleでSQLGetDiagRecを呼び出すことによって、関連付けられている SQLSTATE 値を取得できます。 次の表に、 SQLGetTypeInfo によって一般的に返される SQLSTATE 値の一覧を示し、この関数のコンテキストでそれぞれについて説明します。表記 "(DM)" は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。
SQLSTATE | エラー | 説明 |
---|---|---|
01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
01S02 | オプション値の変更 | 指定されたステートメント属性は、実装の作業条件のために無効であるため、同様の値が一時的に置き換えられました。 (呼び出し SQLGetStmtAttr 一時的に置換された値を決定します。置き換える値は、カーソルが閉じられるまで、 StatementHandle に対して有効です。 変更できるステートメント属性は、SQL_ATTR_CONCURRENCY、SQL_ATTR_CURSOR_TYPE、SQL_ATTR_KEYSET_SIZE、SQL_ATTR_MAX_LENGTH、SQL_ATTR_MAX_ROWS、SQL_ATTR_QUERY_TIMEOUT、およびSQL_ATTR_SIMULATE_CURSORです。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
24000 | カーソル状態が無効 | StatementHandle、、SQLFetch または SQLFetchScroll でカーソルが開かれていましたが呼び出されました。 このエラーは、 SQLFetch または SQLFetchScroll がSQL_NO_DATAを返していない場合にドライバー マネージャーによって返され、 SQLFetch または SQLFetchScroll がSQL_NO_DATAを返した場合にドライバーによって返されます。 結果セットは StatementHandle で開かれていますが、 SQLFetch または SQLFetchScroll が呼び出されませんでした。 |
40001 | シリアル化エラー | 別のトランザクションでリソースのデッドロックが発生したため、トランザクションがロールバックされました。 |
40003 | ステートメントの入力候補が不明です | この関数の実行中に関連付けられた接続が失敗し、トランザクションの状態を特定できません。 |
HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。 |
HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
HY004 | SQL データ型が無効です | 引数 DataType に指定された値は、有効な ODBC SQL データ型識別子でも、ドライバーでサポートされているドライバー固有のデータ型識別子でもありません。 |
HY008 | 操作が取り消されました | StatementHandle に対して非同期処理が有効になり、関数が呼び出され、実行が完了する前に、SQLCancel または SQLCancelHandle が StatementHandle で呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle がマルチスレッド アプリケーションの別のスレッドから StatementHandle で呼び出されました。 |
HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLGetTypeInfo 関数が呼び出されたときにまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、または SQLMoreResults StatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 (DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出されこの関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
HYC00 | 省略可能な機能が実装されていません | SQL_ATTR_CONCURRENCY属性とSQL_ATTR_CURSOR_TYPE ステートメント属性の現在の設定の組み合わせは、ドライバーまたはデータ ソースではサポートされていませんでした。 SQL_ATTR_USE_BOOKMARKS ステートメント属性はSQL_UB_VARIABLEに設定され、SQL_ATTR_CURSOR_TYPE ステートメント属性は、ドライバーがブックマークをサポートしていないカーソルの種類に設定されました。 |
HYT00 | タイムアウトの期限が切れました | データ ソースが結果セットを返す前に、クエリのタイムアウト期間が期限切れになりました。 タイムアウト期間は、SQL_ATTR_QUERY_TIMEOUT SQLSetStmtAttr によって設定されます。 |
HYT01 | 接続のタイムアウト | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。 |
IM001 | ドライバーは、この関数をサポートしていません | (DM) StatementHandle に対応するドライバーは、関数をサポートしていません。 |
IM017 | 非同期通知モードでポーリングが無効になっている | 通知モデルが使用されるたびに、ポーリングは無効になります。 |
IM018 | SQLCompleteAsync は、このハンドルに対する前の非同期操作を完了するために呼び出されていません。 | ハンドルに対する前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、 SQLCompleteAsync をハンドルで呼び出す必要があります。 |
Comments
SQLGetTypeInfo は、DATA_TYPE順に並べ替えられた結果を標準の結果セットとして返し、その後、データ型が対応する ODBC SQL データ型にどれだけ近い位置にマップされるかによって返されます。 データ ソースによって定義されたデータ型は、ユーザー定義のデータ型よりも優先されます。 したがって、並べ替え順序は必ずしも一貫しているわけではありませんが、最初にDATA_TYPE、次にTYPE_NAME(両方とも昇順)として一般化できます。 たとえば、データ ソースで INTEGER データ型と COUNTER データ型が定義されており、COUNTER が自動インクリメントされ、ユーザー定義のデータ型 WHOLENUM も定義されているとします。 これらは INTEGER、WHOLENUM、COUNTER の順序で返されます。WHOLENUM は ODBC SQL データ型SQL_INTEGERに密接にマップされますが、データ ソースでサポートされている場合でも、自動インクリメントデータ型は ODBC SQL データ型に密接にマップされないためです。 この情報の使用方法については、「 DDL ステートメント」を参照してください。
DataType引数は、ドライバーでサポートされている ODBC のバージョンに対して有効なデータ型を指定しますが、ドライバーでサポートされていない場合は、空の結果セットが返されます。
Note
ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 Catalog Functionsを参照してください。
ODBC 3. では、次の列の名前が変更されましたx。 列名の変更は、アプリケーションが列番号でバインドされるため、下位互換性には影響しません。
ODBC 2.0 列 | ODBC 3.x 列 |
---|---|
PRECISION | COLUMN_SIZE |
MONEY | FIXED_PREC_SCALE |
AUTO_INCREMENT | AUTO_UNIQUE_VALUE |
ODBC 3. 用の SQLGetTypeInfo によって返される結果セットに、次の列が追加されましたx:
SQL_DATA_TYPE
INTERVAL_PRECISION
SQL_DATETIME_SUB
NUM_PREC_RADIX
次の表に、結果セットの列を示します。 列 19 (INTERVAL_PRECISION) を超える追加の列は、ドライバーによって定義できます。 アプリケーションは、明示的な序数位置を指定するのではなく、結果セットの末尾からカウントダウンすることで、ドライバー固有の列にアクセスできるようにする必要があります。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。
Note
SQLGetTypeInfo はすべてのデータ型を返すわけではありません。 たとえば、ドライバーがユーザー定義のデータ型を返さない場合があります。 アプリケーションは、 SQLGetTypeInfo によって返されるかどうかに関係なく、任意の有効なデータ型を使用できます。 SQLGetTypeInfo によって返されるデータ型は、データ ソースでサポートされているデータ型です。 これらは、データ定義言語 (DDL) ステートメントで使用することを目的としています。 ドライバーは、 SQLGetTypeInfo によって返される型以外のデータ型を使用して結果セット データを返すことができます。 カタログ関数の結果セットを作成する場合、ドライバーはデータ ソースでサポートされていないデータ型を使用する場合があります。
列名 | 列 数値 |
データ型 | コメント |
---|---|---|---|
TYPE_NAME (ODBC 2.0) | 1 | Varchar not NULL | データ ソースに依存するデータ型名。たとえば、"CHAR()"、"VARCHAR()"、"MONEY"、"LONG VARBINARY"、または "CHAR ( ) FOR BIT DATA" などです。 アプリケーションは、 |
DATA_TYPE (ODBC 2.0) | 2 | Smallint (NULL 以外) | SQL データ型。 ODBC SQL データ型またはドライバー固有の SQL データ型を指定できます。 datetime または interval データ型の場合、この列は簡潔なデータ型 (SQL_TYPE_TIMEやSQL_INTERVAL_YEAR_TO_MONTHなど) を返します。 有効な ODBC SQL データ型の一覧については、「付録 D: データ型」の「 SQL データ型 」を参照してください。 ドライバー固有の SQL データ型の詳細については、ドライバーのドキュメントを参照してください。 |
COLUMN_SIZE (ODBC 2.0) | 3 | Integer | このデータ型に対してサーバーがサポートする最大列サイズ。 数値データの場合、これは最大有効桁数です。 文字列データの場合、これは文字数です。 datetime データ型の場合、これは文字列表現の文字数です (秒の小数部の最大有効桁数を想定)。 列サイズが適用されないデータ型の場合は NULL が返されます。 間隔データ型の場合、これは間隔リテラルの文字表現の文字数です (間隔の先頭の有効桁数で定義されます)。「付録 D: データ型」の Interval データ型の長さ を参照してください)。 列サイズの詳細については、「付録 D: データ型」の「 列サイズ、10 進数、転送オクテット長、および表示サイズ を参照してください。 |
LITERAL_PREFIX (ODBC 2.0) | 4 | Varchar | リテラルの前に付ける文字または文字。たとえば、文字データ型の場合は単一引用符 (')、バイナリ データ型の場合は 0x です。リテラル プレフィックスが適用されないデータ型には NULL が返されます。 |
LITERAL_SUFFIX (ODBC 2.0) | 5 | Varchar | リテラルを終了するために使用される文字。たとえば、文字データ型の単一引用符 (') などです。リテラル サフィックスが適用されないデータ型には NULL が返されます。 |
CREATE_PARAMS (ODBC 2.0) | 6 | Varchar | TYPE_NAME フィールドに返される名前を使用するときに、アプリケーションでかっこで囲んで指定できる各パラメーターに対応する、コンマで区切られたキーワードのリスト。 リスト内のキーワードには、長さ、有効桁数、または小数点以下桁数のいずれかを指定できます。 構文で使用する必要がある順序で表示されます。 たとえば、DECIMAL のCREATE_PARAMSは "precision,scale" になります。VARCHAR のCREATE_PARAMSは "length" と等しくなります。データ型定義のパラメーターがない場合は NULL が返されます。たとえば、INTEGER です。 ドライバーは、CREATE_PARAMSテキストを使用する国/地域の言語で提供します。 |
NULLABLE (ODBC 2.0) | 7 | Smallint (NULL 以外) | データ型が NULL 値を受け入れるかどうか: データ型が NULL 値を受け入れない場合にSQL_NO_NULLSします。 データ型が NULL 値を受け入れるかどうかをSQL_NULLABLEします。 列が NULL 値を受け入れるかどうかがわからない場合にSQL_NULLABLE_UNKNOWNします。 |
CASE_SENSITIVE (ODBC 2.0) | 8 | Smallint (NULL 以外) | 照合順序と比較で文字データ型で大文字と小文字が区別されるかどうか: データ型が文字データ型であり、大文字と小文字が区別される場合にSQL_TRUEします。 データ型が文字データ型でない場合、または大文字と小文字が区別されない場合にSQL_FALSEします。 |
SEARCHABLE (ODBC 2.0) | 9 | Smallint (NULL 以外) | WHERE 句でのデータ型の使用方法: 列を WHERE 句で使用できない場合にSQL_PRED_NONEします。 (これは ODBC 2. のSQL_UNSEARCHABLE値と同じですx.) 列を WHERE 句で使用できるが、 LIKE 述語でのみ使用できるかどうかをSQL_PRED_CHARします。 (これは ODBC 2. のSQL_LIKE_ONLY値と同じですx.) WHERE 句で、LIKE (比較、定量化された比較、BETWEEN、DISTINCT、IN、MATCH、および UNIQUE を除くすべての比較演算子で列を使用できるかどうかをSQL_PRED_BASICします。 (これは ODBC 2. のSQL_ALL_EXCEPT_LIKE値と同じですx.) SQL_SEARCHABLE、 WHERE 句で比較演算子を指定して列を使用できるかどうかを示します。 |
UNSIGNED_ATTRIBUTE (ODBC 2.0) | 10 | Smallint | データ型が符号なしかどうか: データ型が符号なしかどうかをSQL_TRUEします。 データ型が署名されているかどうかをSQL_FALSEします。 属性がデータ型に適用できない場合、またはデータ型が数値でない場合、NULL が返されます。 |
FIXED_PREC_SCALE (ODBC 2.0) | 11 | Smallint (NULL 以外) | Money データ型など、データ型に定義済みの固定有効桁数と小数点以下桁数 (データ ソース固有) があるかどうか。 固定精度と小数点以下桁数が事前に定義されているかどうかをSQL_TRUEします。 定義済みの固定精度と小数点以下桁数がない場合にSQL_FALSEします。 |
AUTO_UNIQUE_VALUE (ODBC 2.0) | 12 | Smallint | データ型が自動作成であるかどうか: データ型が自動作成の場合にSQL_TRUEします。 データ型が自動作成されていない場合にSQL_FALSEします。 属性がデータ型に適用できない場合、またはデータ型が数値でない場合、NULL が返されます。 アプリケーションは、この属性を持つ列に値を挿入できますが、通常は列の値を更新できません。 自動インクリメント列に挿入を行うと、挿入時に一意の値が列に挿入されます。 増分は定義されていませんが、データ ソース固有です。 アプリケーションでは、自動インクリメント列が特定の時点から開始するか、特定の値だけインクリメントされることを想定しないでください。 |
LOCAL_TYPE_NAME (ODBC 2.0) | 13 | Varchar | データ型のデータ ソースに依存する名前のローカライズされたバージョン。 ローカライズされた名前がそのデータ ソースによってサポートされない場合は NULL が返されます。 この名前は、ダイアログ ボックスなどの表示のみを目的としています。 |
MINIMUM_SCALE (ODBC 2.0) | 14 | Smallint | データ ソースのデータ型の最小スケール。 データ型の小数点以下桁数が固定されている場合は、MINIMUM_SCALE 列および MAXIMUM_SCALE 列の両方にこの値が入ります。 たとえば、SQL_TYPE_TIMESTAMP列の小数部の小数点以下桁数が固定されている場合があります。 小数点以下桁数が適用されない場合は、NULL が返されます。 詳細については、「付録 D: データ型」の「 Column Size、Decimal Digits、Transfer Octet Length、および Display Size を参照してください。 |
MAXIMUM_SCALE (ODBC 2.0) | 15 | Smallint | データ ソースのデータ型の最大スケール。 小数点以下桁数が適用されない場合は、NULL が返されます。 最大スケールがデータ ソースで個別に定義されていないが、代わりに最大有効桁数と同じとして定義されている場合、この列にはCOLUMN_SIZE列と同じ値が含まれます。 詳細については、「付録 D: データ型」の「 Column Size、Decimal Digits、Transfer Octet Length、および Display Size を参照してください。 |
SQL_DATA_TYPE (ODBC 3.0) | 16 | NULL でない Smallint | 記述子の SQL_DESC_TYPE フィールドに表示される SQL データ型の値。 この列は、間隔データ型と datetime データ型を除き、DATA_TYPE列と同じです。 interval データ型と datetime データ型の場合、結果セットのSQL_DATA_TYPE フィールドはSQL_INTERVALまたはSQL_DATETIMEを返し、SQL_DATETIME_SUB フィールドは特定の間隔または datetime データ型のサブコードを返します。 ( を参照してください付録 D: データ型.) |
SQL_DATETIME_SUB (ODBC 3.0) | 17 | Smallint | SQL_DATA_TYPEの値がSQL_DATETIMEまたはSQL_INTERVALの場合、この列には datetime/interval サブコードが含まれます。 datetime および interval 以外のデータ型の場合、このフィールドは NULL です。 interval または datetime データ型の場合、結果セットのSQL_DATA_TYPE フィールドはSQL_INTERVALまたはSQL_DATETIMEを返し、SQL_DATETIME_SUB フィールドは特定の間隔または datetime データ型のサブコードを返します。 ( を参照してください付録 D: データ型.) |
NUM_PREC_RADIX (ODBC 3.0) | 18 | Integer | データ型が近似数値型の場合、この列には値 2 が含まれています。これは、COLUMN_SIZEがビット数を指定することを示します。 正確な数値型の場合、この列には、COLUMN_SIZEが 10 進数の桁数を指定することを示す値 10 が含まれています。 その他の場合、この列は NULL になります。 |
INTERVAL_PRECISION (ODBC 3.0) | 19 | Smallint | データ型が間隔データ型の場合、この列には、間隔の先頭の有効桁数の値が含まれます。 ( を参照してくださいInterval データ型の有効桁数 付録 D: データ型)。それ以外の場合、この列は NULL です。 |
属性情報は、データ型または結果セット内の特定の列に適用できます。 SQLGetTypeInfo は、データ型に関連付けられている属性に関する情報を返します。 SQLColAttribute は、結果セット内の列に関連付けられている属性に関する情報を返します。
関連する関数
情報 | 参照トピック |
---|---|
結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
ステートメント処理の取り消し | SQLCancel 関数 |
結果セット内の列に関する情報を返す | SQLColAttribute 関数 |
データブロックのフェッチまたは結果セットのスクロール | SQLFetchScroll 関数 |
1 つの行またはデータ ブロックを順方向にフェッチする | SQLFetch 関数 |
ドライバーまたはデータ ソースに関する情報を返す | SQLGetInfo 関数 |