適合 性
導入版:ODBC 1.0 規格準拠:ODBC
まとめ
SQLColumnPrivileges は指定されたテーブルの列と関連する権限のリストを返します。 ドライバーは指定された StatementHandleの結果セットとして情報を返します。
Syntax
SQLRETURN SQLColumnPrivileges(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
引数
StatementHandle
[入力]ステートメント ハンドル。
CatalogName
[入力]カタログ名。 ドライバが一部のカタログの名前をサポートしているが、他のカタログには対応しない場合(例えば異なるDBMSからデータを取得する場合など)、空文字列(「」)は名前のないカタログを示します。
CatalogNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 CatalogName は識別子として扱われ、その大文字は重要ではありません。 もしSQL_FALSEであれば、 カタログ名 は通常の引数となります。文字通りに扱われており、そのケースは重要です。 詳細については、「カタログ関数の引数」を参照してください。
NameLength1
[入力]*カタログ名の文字数。
SchemaName
[入力]スキーマ名。 ドライバが一部のテーブルにはスキーマをサポートし、他のテーブルにはサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、空の文字列(「」)はスキーマを持たないテーブルを示します。
SchemaNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 SchemaName は識別子として扱われます。 もしSQL_FALSEなら、 SchemaName は通常の引数です。文字通りに扱われており、そのケースは重要です。
NameLength2
[入力]*SchemaNameの文字数。
テーブル名
[入力]テーブル名。 この引数はヌルポインタにはなり得ません。
TableNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 TableName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 TableName は通常の引数です。文字通りに扱われており、そのケースは重要です。
NameLength3
[入力]*TableNameの文字数。
ColumnName
[入力]列名の文字列検索パターン。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 ColumnName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 ColumnName はパターン値の引数です。文字通りに扱われており、そのケースは重要です。
名前の長さ4
[入力]*ColumnNameの文字数。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。
Diagnostics
SQLColumnPrivilegesがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、SQLGetDiagRecを呼び出し、HandleTypeをSQL_HANDLE_STMT、HandleをStatementHandleで呼び出すことで関連するSQLSTATE値を取得できます。 以下の表は 、SQLColumnPrivileges によって一般的に返される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 に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle が StatementHandle で呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle がマルチスレッド アプリケーション内の別のスレッドから StatementHandle で呼び出されました。 |
| HY009 | null ポインターの使用が無効です |
TableName 引数は null ポインターでした。 SQL_ATTR_METADATA_ID文属性はSQL_TRUEに設定され、 CatalogName の引数はnullポインタであり、SQL_CATALOG_NAME InfoType はカタログ名がサポートされていることを返します。 (DM) SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定され、 SchemaName または ColumnName の引数はnullポインタでした。 |
| HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、この関数が呼び出された時点でまだ実行中でした。 (DM) SQLExecute、 SQLExecDirect、または SQLMoreResultsStatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 (DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出されこの関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
| HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
| HY090 | 文字列またはバッファーの長さが無効です | (DM) 名前の長さの引数のうちの一つの値は0未満で、SQL_NTSと等しくなかった。 |
| 名前の長さの引数のいずれかの値が、対応する名前の最大長の値を超えました。 (「コメント」参照) | ||
| HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
| HYC00 | 省略可能な機能が実装されていません | カタログ名が指定されており、ドライバーやデータソースはカタログをサポートしていません。 スキーマ名が指定されており、ドライバやデータソースはスキーマをサポートしていません。 列名には文字列検索パターンが指定されており、データソースはその引数の検索パターンをサポートしていません。 SQL_CONCURRENCYとSQL_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
SQLColumnPrivileges は、TABLE_CAT、TABLE_SCHEM、TABLE_NAME、COLUMN_NAME、PRIVILEGEの順に並べた標準結果セットとして結果を返します。
Note
SQLColumnPrivileges はすべての列に対して権限を返すとは限りません。 例えば、ドライバーはOracle ROWIDのような擬似カラムの権限情報を返さない場合があります。 アプリケーションは、 SQLColumnPrivilegesによって返されるかどうかに関わらず、任意の有効な列を使用できます。
VARCHARの列の長さは表には示されていません。実際の長さはデータソースによって異なります。 CATALOG_NAME、SCHEMA_NAME、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 を呼び出すことができます。
Note
ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 カタログ関数」を参照してください。
以下の列はODBC 3に改名されています。x。 カラム名の変更は後方互換性には影響しません。なぜならアプリケーションはカラム番号でバインドするからです。
| ODBC 2.0 列 | ODBC 3。x 列 |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| テーブルの所有者 | TABLE_SCHEM |
次の表に、結果セットの列を示します。 8列(IS_GRANTABLE)を超えた追加の列はドライバーによって定義可能です。 アプリケーションは、明示的な順序位置を指定するのではなく、結果セットの末尾からカウントダウンすることでドライバー固有の列にアクセスするべきです。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。
| 列名 | 列番号 | データの種類 | 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 | ヴァルチャーはNULLではありません | テーブル識別子。 |
| COLUMN_NAME(ODBC 1.0) | 4 | ヴァルチャーはNULLではありません | 列名。 ドライバーは名前のない列に対して空文字列を返します。 |
| GRANTOR(ODBC 1.0) | 5 | Varchar | 権限を付与したユーザーの名前;データソースに適用できない場合はNULLです。 GRANTEE列の値がオブジェクトの所有者であるすべての行では、GRANTOR列は「_SYSTEM」となります。 |
| 受給者(ODBC 1.0) | 6 | ヴァルチャーはNULLではありません | その特権が付与されたユーザーの名前。 |
| 特権(ODBC 1.0) | 7 | ヴァルチャーはNULLではありません | 列特権を特定します。 以下のいずれか(または実装時にデータソースがサポートする他のもの)である場合もあります。 SELECT:譲受者はその列のデータを取得することが許可されています。 INSERT: 譲受者は、関連するテーブルに挿入される新しい行の列のデータを提供することが許可されています。 UPDATE譲受人は列内のデータを更新することが許可されています。 参照:助成先は制約内の列を参照することが許されています(例:一意、参照、またはテーブルチェック制約など)。 |
| IS_GRANTABLE(ODBC 1.0) | 8 | Varchar | 受領者が他の利用者に特権を付与できるかどうかを示します。「YES」「NO」または「NULL」は、データソースに適用できない場合や不明な場合に適用されます。 特権は付与可能か付与できないかのどちらかであり、両方ではありません。 SQLColumnPrivilegesが返す結果セットには、IS_GRANTABLE列以外のすべての列が同じ値を持つ2行は決して含まれません。 |
コード例
同様の関数のコード例については、「 SQLColumns 関数」を参照してください。
関連関数
| 詳細情報 | 参照先 |
|---|---|
| 結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
| ステートメント処理の取り消し | SQLCancel 関数 |
| テーブルまたは複数のテーブルの列を返す | SQLColumns 関数 |
| データブロックのフェッチまたは結果セットのスクロール | SQLFetchScroll 関数 |
| 複数行のデータをフェッチする | SQLFetch 関数 |
| テーブルまたはテーブルの返品権限 | SQLTablePrivileges 関数 |
| データソース内のテーブル一覧の返還 | SQLTables 関数 |