SQLStatistics は、1 つのテーブルとテーブルに関連付けられているインデックスに関する統計の一覧を取得します。 ドライバーは、結果セットとして情報を返します。
準拠
導入されたバージョン: ODBC 1.0 標準コンプライアンス: ISO 92
構文
SQLRETURN SQLStatistics(
SQLHSTMT StatementHandle ,
SQLCHAR * CatalogName ,
SQLSMALLINT NameLength1 ,
SQLCHAR * SchemaName ,
SQLSMALLINT NameLength2 ,
SQLCHAR * TableName ,
SQLSMALLINT NameLength3 ,
SQLUSMALLINT Unique ,
SQLUSMALLINT Reserved);
論争
StatementHandle
[入力]ステートメント ハンドル。
CatalogName
[入力]カタログ名。 ドライバーが一部のテーブルのカタログをサポートしているが、他のテーブルではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、空の文字列 ("") はカタログがないテーブルを示します。
CatalogName に文字列検索パターンを含めることはできません。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、CatalogName は識別子として扱われ、大文字と小文字は区別されません。
SQL_FALSEの場合、CatalogName は通常の引数です。リテラルとして扱われ、大文字と小文字は重要です。 詳細については、「 カタログ関数の引数」を参照してください。
NameLength1
[入力] CatalogName の文字数。
SchemaName
[入力]スキーマ名。 ドライバーが一部のテーブルのスキーマをサポートしているが、他のテーブルではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、空の文字列 ("") はスキーマを持たないテーブルを示します。
SchemaName に文字列検索パターンを含めることはできません。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、SchemaName は識別子として扱われ、大文字と小文字は区別されません。
SQL_FALSEの場合、SchemaName は通常の引数です。リテラルで扱われ、大文字と小文字は重要です。
NameLength2
[入力] SchemaName の文字数。
テーブル名
[入力]テーブル名。 この引数を null ポインターにすることはできません。 TableName に文字列検索パターンを含めることはできません。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、TableName は識別子として扱われ、大文字と小文字は区別されません。
SQL_FALSEの場合、TableName は通常の引数です。リテラルで扱われ、その大文字と小文字は重要です。
NameLength3
[入力] TableName の文字数。
ユニーク
[入力]インデックスの種類: SQL_INDEX_UNIQUE または SQL_INDEX_ALL。
予約済み
[入力]結果セット内の CARDINALITY 列と PAGES 列の重要度を示します。 次のオプションは、 CARDINALITY 列と PAGES 列の戻り値にのみ影響します。 CARDINALITY および PAGES が返されない場合でも、インデックス情報が返されます。
SQL_ENSURE は、ドライバーが統計を無条件に取得することを要求します。 (Open Group 標準にのみ準拠し、ODBC 拡張機能をサポートしていないドライバーは、 SQL_ENSUREをサポートできません)。
SQL_QUICK は、ドライバーが CARDINALITY を取得し、サーバーからすぐに使用できる場合にのみ PAGES を要求します。 この場合、ドライバーは値が最新であることを確認しません。 (Open Group 標準に書き込まれたアプリケーションは、常に ODBC 3.x 準拠ドライバーからSQL_QUICK動作を取得します)。
返品ポリシー
SQL_SUCCESS、 SQL_SUCCESS_WITH_INFO、 SQL_STILL_EXECUTING、 SQL_ERROR、または SQL_INVALID_HANDLE。
Diagnostics
SQLStatisticsがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、関連付けられているSQLSTATE値を取得するには、SQL_HANDLE_STMT の HandleType と StatementHandle のハンドルを使用してSQLGetDiagRecを呼び出します。 次の表に、SQLStatisticsによって通常返されるSQLSTATE値の一覧を示し、この関数のコンテキストでそれぞれについて説明します。(DM)表記は、ドライバー マネージャーによって返される各SQLSTATEの説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられているリターン コードは SQL_ERROR。
| SQLSTATE | エラー | Description |
|---|---|---|
01000 |
一般的な警告 | ドライバー固有の情報メッセージ。 (関数は 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 |
メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
HY008 |
操作が取り消されました |
StatementHandle に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、StatementHandle でSQLCancelまたはSQLCancelHandleが呼び出された後、その関数が StatementHandle で再度呼び出されました。関数が呼び出され、実行が完了する前に、マルチスレッド アプリケーション内の別のスレッドから StatementHandle で SQLCancelまたはSQLCancelHandleが呼び出されました。 |
HY009 |
null ポインターの使用が無効です |
TableName 引数は null ポインターでした。SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定され、CatalogName 引数が null ポインターであり、SQL_CATALOG_NAMEInfoType はカタログ名がサポートされていることを返します。(DM) SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定され、 SchemaName 引数が null ポインターでした。 |
HY010 |
関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLStatistics 関数が呼び出されたときにまだ実行されていました。(DM) StatementHandle に対して SQLExecute、SQLExecDirect、またはSQLMoreResultsが呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。(DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。 (DM) StatementHandle に対して SQLExecute、SQLExecDirect、SQLBulkOperations、またはSQLSetPosが呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
HY013 |
メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
HY090 |
文字列またはバッファーの長さが無効です | (DM) 名前の長さの引数の 1 つの値が 0 未満でしたが、 SQL_NTSと等しくありません。名前の長さの引数のいずれかの値が、対応する名前の最大長の値を超えました。 |
HY100 |
一意性オプションの種類が範囲外 | (DM) 無効な Unique 値が指定されました。 |
HY101 |
精度オプションの種類が範囲外 | (DM) 無効な 予約 値が指定されました。 |
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_TIMEOUTSQLSetStmtAttrによって設定されます。 |
HYT01 |
接続のタイムアウト | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUTSQLSetConnectAttrによって設定されます。 |
IM001 |
ドライバーは、この関数をサポートしていません | (DM) StatementHandle に関連付けられているドライバーは、関数をサポートしていません。 |
IM017 |
非同期通知モードでポーリングが無効になっている | 通知モデルが使用されるたびに、ポーリングは無効になります。 |
IM018 |
SQLCompleteAsync は、このハンドルに対する前の非同期操作を完了するために呼び出されていません。 |
ハンドルの前の関数呼び出しが SQL_STILL_EXECUTING を返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するには、ハンドルに対して SQLCompleteAsync を呼び出す必要があります。 |
Comments
SQLStatistics は、1 つのテーブルに関する情報を、 NON_UNIQUE、 TYPE、 INDEX_QUALIFIER、 INDEX_NAME、および ORDINAL_POSITION順に並べ替えられた標準の結果セットとして返します。 結果セットは、テーブルの統計情報 (結果セットの CARDINALITY 列と PAGES 列) と各インデックスに関する情報を結合します。 この情報の使用方法については、「 カタログ データの使用」を参照してください。
TABLE_CAT、TABLE_SCHEM、TABLE_NAME、およびCOLUMN_NAMEの列の実際の長さを判断するために、アプリケーションはSQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN、およびSQL_MAX_COLUMN_NAME_LENオプションを使用してSQLGetInfoを呼び出すことができます。
注
ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 カタログ関数」を参照してください。
ODBC 3.x では、次の列の名前が変更されました。 列名の変更は、アプリケーションが列番号でバインドされるため、下位互換性には影響しません。
| ODBC 2.0 列 | ODBC 3.x 列 |
|---|---|
TABLE_QUALIFIER |
TABLE_CAT |
TABLE_OWNER |
TABLE_SCHEM |
SEQ_IN_INDEX |
ORDINAL_POSITION |
COLLATION |
ASC_OR_DESC |
次の表に、結果セットの列を示します。 列 13 (FILTER_CONDITION) を超える追加の列は、ドライバーによって定義できます。 アプリケーションは、明示的な序数位置を指定するのではなく、結果セットの末尾からカウントダウンすることで、ドライバー固有の列にアクセスできるようにする必要があります。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。
| 列名 | 列番号 | データの種類 | Comments |
|---|---|---|---|
TABLE_CAT (ODBC 1.0) |
1 | varchar | 統計またはインデックスが適用されるテーブルのカタログ名。データ ソースに該当しない場合は NULL します。 ドライバーが一部のテーブルのカタログをサポートしているが、他のテーブルではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、カタログがないテーブルの空の文字列 ("") が返されます。 |
TABLE_SCHEM (ODBC 1.0) |
2 | varchar | 統計またはインデックスが適用されるテーブルのスキーマ名。データ ソースに該当しない場合は NULL します。 ドライバーが一部のテーブルのスキーマをサポートしているが、他のテーブルではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、スキーマを持たないテーブルの空の文字列 ("") が返されます。 |
TABLE_NAME (ODBC 1.0) |
3 |
varchar not NULL |
統計またはインデックスが適用されるテーブルのテーブル名。 |
NON_UNIQUE (ODBC 1.0) |
4 | smallint | インデックスで重複する値が許可されていないかどうかを示します。SQL_TRUE インデックス値に一意でない値を指定できる場合は 。SQL_FALSE インデックス値が一意である必要がある場合は 。NULL は、 TYPE が SQL_TABLE_STAT場合に返されます。 |
INDEX_QUALIFIER (ODBC 1.0) |
5 | varchar |
DROP INDEXを実行してインデックス名を修飾するために使用される識別子。NULLは、インデックス修飾子がデータ ソースでサポートされていない場合、またはTYPEがSQL_TABLE_STAT場合に返されます。 この列に null 以外の値が返される場合は、 DROP INDEX ステートメントでインデックス名を修飾するために使用する必要があります。それ以外の場合は、 TABLE_SCHEM を使用してインデックス名を修飾する必要があります。 |
INDEX_NAME (ODBC 1.0) |
6 | varchar | インデックス名。 NULL は、 TYPE が SQL_TABLE_STAT場合に返されます。 |
TYPE (ODBC 1.0) |
7 |
smallint not NULL |
返される情報の種類:SQL_TABLE_STAT は、テーブルの統計を示します ( CARDINALITY 列または PAGES 列)。SQL_INDEX_BTREE は B ツリー インデックスを示します。SQL_INDEX_CLUSTERED はクラスター化インデックスを示します。SQL_INDEX_CONTENT はコンテンツ インデックスを示します。SQL_INDEX_HASHED はハッシュインデックスを示します。SQL_INDEX_OTHER は、別の種類のインデックスを示します。 |
ORDINAL_POSITION (ODBC 1.0) |
八 | smallint | インデックス内の列シーケンス番号 (1 から始まる) NULL は、 TYPE が SQL_TABLE_STAT場合に返されます。 |
COLUMN_NAME (ODBC 1.0) |
9 | varchar | 列名。 列が SALARY + BENEFITS などの式に基づいている場合は、式が返されます。式を特定できない場合は、空の文字列が返されます。
NULL は、 TYPE が SQL_TABLE_STAT場合に返されます。 |
ASC_OR_DESC (ODBC 1.0) |
10 | char(1) | 列の並べ替え順序: 昇順の場合は "A"。"D" for descending; NULL は、データ ソースで列の並べ替え順序がサポートされていない場合、または TYPE が SQL_TABLE_STATされている場合に返されます。 |
CARDINALITY (ODBC 1.0) |
11 | integer | テーブルまたはインデックスのカーディナリティ。 TYPE が SQL_TABLE_STATの場合はテーブル内の行数。 TYPE が SQL_TABLE_STATでない場合はインデックス内の一意の値の数。値がデータ ソースから使用できない場合は NULL が返されます。 |
PAGES (ODBC 1.0) |
12 | integer | インデックスまたはテーブルを格納するために使用されるページの数。 TYPE が SQL_TABLE_STATの場合はテーブルのページ数。 TYPE が SQL_TABLE_STATでない場合はインデックスのページ数。値がデータ ソースから使用できない場合、またはデータ ソースに適用できない場合は NULL が返されます。 |
FILTER_CONDITION (ODBC 2.0) |
13 | varchar | インデックスがフィルター選択されたインデックスの場合、これはフィルター条件 ( SALARY > 30000 など) です。フィルター条件を特定できない場合、これは空の文字列です。NULL インデックスがフィルター選択されたインデックスでない場合は、インデックスがフィルター選択されたインデックスであるか、 TYPE が SQL_TABLE_STATされているかを判断できません。 |
結果セットの行がテーブルに対応する場合、ドライバーは TYPE を SQL_TABLE_STAT に設定し、 NON_UNIQUE、 INDEX_QUALIFIER、 INDEX_NAME、 ORDINAL_POSITION、 COLUMN_NAME、および ASC_OR_DESC を NULLに設定します。 データ ソースから CARDINALITY または PAGES を使用できない場合、ドライバーはそれらを NULLに設定します。
コード例
同様の関数のコード例については、「 SQLColumns 関数」を参照してください。
関連する関数
| 情報 | [アーティクル] |
|---|---|
| 結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
| ステートメント処理の取り消し | SQLCancel 関数 |
| 1 つの行またはデータ ブロックを順方向にフェッチする。 | SQLFetch 関数 |
| データブロックのフェッチまたは結果セットのスクロール | SQLFetchScroll 関数 |
| 外部キーの列を返す | SQLForeignKeys 関数 |
| 主キーの列を返す | SQLPrimaryKeys 関数 |