SQLGetTypeInfo - データ・タイプ情報の入手
SQLGetTypeInfo() は、Db2 for i CLI に関連付けられたデータベース管理システム (DBMS) でサポートされているデータ型に関する情報を返します。 その情報は、SQL 結果セットに戻されます。 照会を処理するのに使うのと同じ関数を使って、
列を受け取ることができます。
構文
SQLRETURN SQLGetTypeInfo (SQLHSTMT StatementHandle,
SQLSMALLINT DataType); 関数引数
| データ・タイプ | 引数 | Use | 説明 |
|---|---|---|---|
| SQLHSTMT | StatementHandle | 入力 | ステートメント・ハンドル |
| SQLSMALLINT | DataType | 入力 | 照会対象の SQL データ・タイプ。 サポートされているタイプは以下のとおりです。
SQL_ALL_TYPES を指定すると、 サポートされているデータ・タイプに関するすべての情報が、 TYPE_NAME 別の昇順で戻されます。 結果セットには、 サポートされていないどのデータ・タイプも入っていません。 |
使用法
SQLGetTypeInfo() は、結果セットを生成しますが、
照会の実行と同じなので、カーソルを生成してトランザクションを開始します。 このステートメント・ハンドル上で別のステートメントを準備作成して処理するには、このカーソルをクローズしなければなりません。
SQLGetTypeInfo() が無効な DataType を指定して呼び出されると、空の結果セットが戻されます。
この関数によって生成される結果セットの列は、以下の表に示すとおりである。
今後のリリースでは、新しい列が追加されたり、 既存の列が変更されたりする可能性はありますが、 現行列の位置は変更されません。 戻されるデータ・タイプは、 CREATE TABLE、ALTER TABLE、DDL ステートメント内で使用できるものです。 非持続データ・タイプは、戻される結果セット内には含まれません。 ユーザー定義のデータ・タイプも戻されません。
| 列番号/列名 | データ・タイプ | 説明 |
|---|---|---|
| 1 TYPE_NAME | VARCHAR(128) NOT NULL | SQL データ・タイプ名の文字による表示 (例: VARCHAR、DATE、INTEGER)。 |
| 2 DATA_TYPE | SMALLINT NOT NULL | SQL データ・タイプ定義値 (例: SQL_VARCHAR、SQL_DATE、SQL_INTEGER)。 |
| 3 COLUMN_SIZE | INTEGER | データ・タイプが文字または 2 進ストリングの場合、この列には、
バイト数の最大長が入ります。また、グラフィック (DBCS) ストリングの場合は、
この列の 2 バイト文字数になります。 日付、時刻、タイム・スタンプのデータ・タイプの場合、これは、 文字への変換後に値を表示するのに必要な合計文字数になります。 数値データ・タイプの場合、これは、合計桁数になります。 |
| 4 LITERAL_PREFIX | VARCHAR(128) | DB2 がこのデータ・タイプのリテラルの接頭部として認識する文字。 リテラルの接頭部が適用されない場合、 この列のデータ・タイプは NULL になります。 |
| 5 LITERAL_SUFFIX | VARCHAR(128) | DB2 がこのデータ・タイプのリテラルの接尾部として認識する文字。 リテラルの接頭部が適用されない場合、 この列のデータ・タイプは NULL になります。 |
| 6 CREATE_PARAMS | VARCHAR(128) | この列のテキストには、コンマで区切られたキーワード・リストが入ります。それらのキーワードは、アプリケーション・プログラムが、SQL におけるデータ・タイプとして TYPE_NAME 列内の名前を使うときに、小括弧で囲んで指定できる各パラメーターに対応します。 このリスト内のキーワードは、LENGTH、PRECISION、SCALE のいずれかになります。 キーワードは、
SQL 構文に定められている使用順序で並んでいます。 データ・タイプ定義 (INTEGER など) 用のパラメーターがない場合、 NULL 標識が戻されます。 注: CREATE_PARAMS の目的は、アプリケーションが DDL ビルダーのインターフェースをカスタマイズできるようにすることです。 アプリケーション・プログラムは、これを使うときは、
データ・タイプを定義するのに必要な引数の数を指定したり、
編集制御にラベルを付けるのに使用できるローカライズされたテキストを備えたりすることしかできないことを承知しておく必要があります。
|
| 7 NULLABLE | SMALLINT NOT NULL | データ・タイプに NULL 値を使用できるかどうかを示します。
|
| 8 CASE_SENSITIVE | SMALLINT NOT NULL | データ・タイプを、照合目的で大文字小文字の区別があるものとして扱えるかどうかを示します。有効な値は SQL_TRUE または SQL_FALSE です。 |
| 9 SEARCHABLE | SMALLINT NOT NULL | WHERE 文節内でのデータ・タイプの使用法を示します。 有効な値は以下のとおりです。
|
| 10 UNSIGNED_ATTRIBUTE | SMALLINT | データ・タイプが符号なしかどうかを示します。 有効値は SQL_TRUE、SQL_FALSE、または NULL です。 この属性が適用されないデータ・タイプの場合、NULL 標識が戻されます。 |
| 11 FIXED_PREC_SCALE | SMALLINT NOT NULL | データ・タイプが、厳密な数値であって、常に同じ精度と位取りをもつ場合、値 SQL_TRUE が入ります。そうでなければ、SQL_FALSE が入ります。 |
| 12 AUTO_UNIQUE_VAL | SMALLINT | 行の挿入時に、このデータ・タイプの列が自動的に固有値に設定される場合は、SQL_TRUE が入ります。そうでなければ、SQL_FALSE が入ります。 |
| 13 LOCAL_TYPE_NAME | VARCHAR(128) | この列には、 データ・タイプの通常名とは異なるローカライズされた任意のデータ・タイプ名が入ります。 ローカライズされた名前がない場合、この列は NULL になります。 この列は表示用でしかありません。 ストリングの文字セットはロケールに準じますが、 通常は、データベースのデフォルトの文字セットになります。 |
| 14 MINIMUM_SCALE | INTEGER | SQL データ・タイプの最小の位取り。 データ・タイプに固定の位取りがある場合、 MINIMUM_SCALE 列と MAXIMUM_SCALE 列の両方に同じ値が入ります。 位取りが該当しない場合は、NULL が戻されます。 |
| 15 MAXIMUM_SCALE | INTEGER | SQL データ・タイプの最大の位取り。 位取りが該当しない場合は、NULL が戻されます。 最大の位取りを DBMS に別個に定義せずに、 列の最大長と同じ値で定義する場合、 この列には COLUMN_SIZE 列と同じ値が入ります。 |
| 16 SQL_DATA_TYPE | SMALLINT NOT NULL | 記述子の SQL_DESC_TYPE フィールドに現れるとおりの、SQL データ・タイプの値。 この列は DATA_TYPE 列と同じです (ただし、 Db2 for i CLI がサポートしていない間隔および日時のデータ・タイプを除きます)。 |
| 17 SQL_DATETIME_SUB | SMALLINT | このフィールドは常に NULL です (Db2 for i CLI は、間隔データ・タイプおよび日時データ・タイプをサポートしません)。 |
| 18 NUM_PREC_RADIX | INTEGER | データ・タイプが推定の数値タイプである場合、 この列には値 2 が入り、COLUMN_SIZE がビットの数値を指定することを示します。 厳密な数値タイプである場合、 この列には値 10 が入り、 COLUMN_SIZE が 10 進数の数値を指定することを示します。 それ以外の場合、この列は NULL です。 |
| 19 INTERVAL_PRECISION | SMALLINT | このフィールドは常に NULL です (Db2 for i CLI は間隔データ・タイプをサポートしません)。 |
戻りコード
- SQL_SUCCESS
- SQL_ERROR
- SQL_INVALID_HANDLE
エラー状況
| SQLSTATE | 説明 | 説明 |
|---|---|---|
| 24000 | カーソル状態が無効 | カーソルは、ステートメント・ハンドル上ですでにオープンしています。 StatementHandle はまだクローズされていません。 |
| 40003 08S01 | 通信リンク障害 | 関数の完了前に、アプリケーション・プログラムとデータ・ソースの間の通信リンクに障害が起こりました。 |
| HY001 | メモリーの割り振りの失敗 | Db2 for i CLI は、関数の処理または完了をサポートするために必要なメモリーを割り振ることができません。 |
| HY004 | SQL データ・タイプが範囲外 | 無効な DataType が指定されています。 |
| HY010 年 | 関数シーケンス・エラー | data-at-processing (SQLParamData()、SQLPutData()) の操作中に関数を呼び出しました。 |
HY021 |
内部記述子が無効 |
内部記述子がアドレッシングできない、割り振れない、または無効な値を持っています。 |
| HYT00 | タイムアウト満了 |
制約事項
| データ・タイプ | DataType |
|---|---|
| TINY INT | SQL_TINYINT |
| BIT | SQL_BIT |
例
/* From CLI sample typeinfo.c */
/* ... */
rc = SQLGetTypeInfo(hstmt, SQL_ALL_TYPES);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 1, SQL_C_CHAR, (SQLPOINTER) typename.s, 128, &typename.ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 2, SQL_C_DEFAULT, (SQLPOINTER) & datatype,
sizeof(datatype), &datatype_ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 3, SQL_C_DEFAULT, (SQLPOINTER) & precision,
sizeof(precision), &precision_ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 7, SQL_C_DEFAULT, (SQLPOINTER) & nullable,
sizeof(nullable), &nullable_ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol(hstmt, 8, SQL_C_DEFAULT, (SQLPOINTER) & casesens,
sizeof(casesens), &casesens_ind);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
printf("Datatype Datatype Precision Nullable Case\n");
printf("Typename (int) Sensitive\n");
printf("------------------------- -------- ---------- -------- ---------\n");
/* LONG VARCHAR FOR BIT DATA 99 2147483647 FALSE FALSE */
/* Fetch each row, and display */
while ((rc = SQLFetch(hstmt)) == SQL_SUCCESS) {
printf("%-25s ", typename.s);
printf("%8d ", datatype);
printf("%10ld ", precision);
printf("%-8s ", truefalse[nullable]);
printf("%-9s\n", truefalse[casesens]);
} /* endwhile */
if ( rc != SQL_NO_DATA_FOUND )
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;