SQLGetTypeInfo 関数

準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: ISO 92

まとめ
SQLGetTypeInfo は、データ ソースでサポートされているデータ型に関する情報を返します。 ドライバーは、SQL 結果セットの形式で情報を返します。 データ型は、データ定義言語 (DDL) ステートメントで使用することを目的としています。

重要

アプリケーションでは、ALTER TABLE ステートメントと CREATE TABLE ステートメントの SQLGetTypeInfo 結果セットのTYPE_NAME列で返される型名を使用する必要があります。 SQLGetTypeInfo は、DATA_TYPE列に同じ値を持つ複数の行を返す場合があります。

構文

  
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を返す場合、関連付けられている SQLSTATE 値を取得するには、SQL_HANDLE_STMTの HandleTypeStatementHandleHandle を指定して SQLGetDiagRec を呼び出します。 次の表に、 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 に対して非同期処理が有効になった後、関数が呼び出され、実行が完了する前に、StatementHandleSQLCancel または SQLCancelHandle が呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。

関数が呼び出され、実行が完了する前に、マルチスレッド アプリケーション内の別のスレッドから StatementHandleSQLCancel または SQLCancelHandle が呼び出されました。
HY010 関数シーケンス エラー (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLGetTypeInfo 関数が呼び出されたときにも実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirect、または SQLMoreResults が呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、ストリーミングされたすべてのパラメーターのデータが取得される前に呼び出されました。

(DM) 非同期実行関数 (この関数ではなく) が StatementHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が呼び出され、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 タイムアウトに達しました データ ソースが結果セットを返す前に、クエリのタイムアウト期間が期限切れになりました。 タイムアウト期間は、 SQLSetStmtAttr (SQL_ATTR_QUERY_TIMEOUT) によって設定されます。
HYT01 接続のタイムアウト データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、 SQLSetConnectAttr (SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) StatementHandle に対応するドライバーは、 関数をサポートしていません。
IM017 非同期通知モードでポーリングが無効になっている 通知モデルを使用するたびに、ポーリングは無効になります。
IM018 SQLCompleteAsync は、このハンドルに対する以前の非同期操作を完了するために呼び出されていません。 ハンドルの前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、ハンドルで SQLCompleteAsync を呼び出す必要があります。

説明

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 カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 カタログ関数」を参照してください。

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 によって返される型以外のデータ型を使用して、結果セット データを返すことができます。 カタログ関数の結果セットを作成する場合、ドライバーはデータ ソースでサポートされていないデータ型を使用する場合があります。

列名

number
データ型 コメント
TYPE_NAME (ODBC 2.0) 1 Varchar not NULL データ ソースに依存するデータ型名。たとえば、"CHAR()"、"VARCHAR()"、"MONEY"、"LONG VARBINARY"、"CHAR ( ) FOR BIT DATA" などです。 アプリケーションでは、 CREATE TABLE ステートメントと ALTER TABLE ステートメントでこの名前を使用する必要があります。
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 が返されます。 interval データ型の場合、これは間隔リテラルの文字表現の文字数です (間隔の先頭の有効桁数で定義されます。「Interval Data Type Length in Appendix D: Data Types」を参照してください)。

列サイズの詳細については、「付録 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は "有効桁数,小数点以下桁数" になります。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.)

列が LIKE (比較、定量化された比較、BETWEENDISTINCT、IN、MATCHUNIQUE) を除くすべての比較演算子と共に WHERE使用できる場合にSQL_PRED_BASICします。 (これは ODBC 2 のSQL_ALL_EXCEPT_LIKE値と同じです。x.)

列を WHERE 句で任意の比較演算子と共に使用できるかどうかをSQL_SEARCHABLEします。
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: データ型」の 「列サイズ、10 進数、転送オクテット長」、「表示サイズ 」を参照してください。
MAXIMUM_SCALE (ODBC 2.0) 15 Smallint データ ソースのデータ型の最大スケール。 スケールが適用されない場合は NULL が返されます。 最大スケールがデータ ソースで個別に定義されていないが、代わりに最大有効桁数と同じとして定義されている場合、この列にはCOLUMN_SIZE列と同じ値が含まれます。 詳細については、「付録 D: データ型」の 「列サイズ、10 進数、転送オクテット長」、「表示サイズ 」を参照してください。
SQL_DATA_TYPE (ODBC 3.0) 16 NULL でない Smallint 記述子の SQL_DESC_TYPE フィールドに表示される SQL データ型の値。 この列は、interval データ型と 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 整数型 データ型が近似数値型の場合、この列には値 2 が格納され、COLUMN_SIZEにビット数が指定されていることを示します。 正確な数値型の場合、この列には値 10 が含まれています。これは、COLUMN_SIZEが 10 進数を指定することを示します。 その他の場合、この列は NULL になります。
INTERVAL_PRECISION (ODBC 3.0) 19 Smallint データ型が間隔データ型の場合、この列には間隔の先頭の有効桁数の値が含まれます。 (「付録 D: データ型」の「Interval データ型の精度 」を参照してください)。それ以外の場合、この列は NULL です。

属性情報は、データ型または結果セット内の特定の列に適用できます。 SQLGetTypeInfo は 、データ型に関連付けられている属性に関する情報を返します。 SQLColAttribute は、結果セット内の列に関連付けられている属性に関する情報を返します。

対象 解決方法については、
結果セット内の列へのバッファーのバインド SQLBindCol 関数
ステートメント処理の取り消し SQLCancel 関数
結果セット内の列に関する情報を返す SQLColAttribute 関数
データブロックのフェッチまたは結果セットのスクロール SQLFetchScroll 関数
1 つの行またはデータ ブロックを前方専用方向にフェッチする SQLFetch 関数
ドライバーまたはデータ ソースに関する情報を返す SQLGetInfo 関数

参照

ODBC API リファレンス
ODBC ヘッダー ファイル