SQLColumnPrivileges 関数
準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: ODBC
まとめ
SQLColumnPrivileges は、指定されたテーブルの列と関連付けられた特権の一覧を返します。 ドライバーは、指定した StatementHandle の結果セットとして情報を返します。
構文
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の場合、 CatalogName は通常の引数です。これはリテラルとして扱われ、その場合は重要です。 詳細については、「 カタログ関数の引数」を参照してください。
NameLength1
[入力]*CatalogName の文字数。
Schemaname
[入力]スキーマ名。 ドライバーが一部のテーブルのスキーマをサポートしているが、他のテーブルではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、空の文字列 ("") はスキーマを持たないテーブルを示します。 SchemaName に文字列検索パターンを含めることはできません。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、 SchemaName は識別子として扱われます。 SQL_FALSEの場合、 SchemaName は通常の引数です。これはリテラルとして扱われ、その場合は重要です。
NameLength2
[入力]*SchemaName の文字数。
TableName
[入力]テーブル名。 この引数を null ポインターにすることはできません。 TableName に文字列検索パターンを含めることはできません。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、 TableName は識別子として扱われ、大文字と小文字は区別されません。 SQL_FALSEの場合、 TableName は通常の引数です。これはリテラルとして扱われ、その場合は重要です。
NameLength3
[入力]*TableName の文字数。
[ColumnName]
[入力]列名の文字列検索パターン。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、 ColumnName は識別子として扱われ、大文字と小文字は区別されません。 SQL_FALSEの場合、 ColumnName はパターン値引数です。これはリテラルとして扱われ、その場合は重要です。
NameLength4
[入力]*ColumnName の文字数。
戻り値
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。
診断
SQLColumnPrivileges がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、関連付けられた SQLSTATE 値を取得するには、HandleType が SQL_HANDLE_STMT で、Handle of StatementHandle を使用して SQLGetDiagRec を呼び出します。 次の表に、 SQLColumnPrivileges によって一般的に返される SQLSTATE 値の一覧を示し、この関数のコンテキストでそれぞれについて説明します。"(DM)" という表記は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられた戻りコードはSQL_ERRORされます。
SQLSTATE | エラー | 説明 |
---|---|---|
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_NAME InfoType はカタログ名がサポートされていることを返します。 (DM) SQL_ATTR_METADATA_ID ステートメント属性がSQL_TRUEに設定され、 引数 SchemaName または ColumnName が null ポインターでした。 |
HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、この関数が呼び出されたときにまだ実行されていました。 (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と等しくありません。 |
名前の長さの引数の 1 つの値が、対応する名前の最大長の値を超えました。 (「コメント」を参照)。 | ||
HY117 | トランザクションの状態が不明なため、接続が中断されます。 切断と読み取り専用の関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数」を参照してください。 |
HYC00 | 省略可能な機能が実装されていません | カタログ名が指定されており、ドライバーまたはデータ ソースはカタログをサポートしていません。 スキーマ名が指定されており、ドライバーまたはデータ ソースはスキーマをサポートしていません。 列名に文字列検索パターンが指定されました。データ ソースでは、その引数の検索パターンはサポートされていません。 SQL_CONCURRENCY と SQL_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 をハンドルで呼び出す必要があります。 |
説明
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_OWNER | TABLE_SCHEM |
次の表に、結果セットの列を示します。 列 8 (IS_GRANTABLE) を超える追加の列は、ドライバーによって定義できます。 アプリケーションは、明示的な序数位置を指定するのではなく、結果セットの末尾からカウントダウンすることで、ドライバー固有の列にアクセスする必要があります。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。
列名 | 列番号 | データ型 | コメント |
---|---|---|---|
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 | テーブル識別子。 |
COLUMN_NAME (ODBC 1.0) | 4 | Varchar not NULL | 列名。 ドライバーは、名前のない列の空の文字列を返します。 |
GRANTOR (ODBC 1.0) | 5 | Varchar | 特権を付与したユーザーの名前。データ ソースに該当しない場合は NULL。 GRANTEE 列の値がオブジェクトの所有者であるすべての行について、GRANTOR 列は "_SYSTEM" になります。 |
GRANTEE (ODBC 1.0) | 6 | Varchar not NULL | 特権が付与されたユーザーの名前。 |
PRIVILEGE (ODBC 1.0) | 7 | Varchar not NULL | 列の特権を識別します。 実装が定義されている場合は、次のいずれか (またはデータ ソースでサポートされている他のユーザー) を指定できます。 SELECT: 権限付与対象ユーザーは、列のデータを取得できます。 INSERT: 権限付与対象ユーザーは、関連付けられたテーブルに挿入される新しい行の列のデータを提供できます。 UPDATE: 権限付与対象ユーザーは、列のデータを更新できます。 REFERENCES: 権限付与対象ユーザーは、制約内の列 (一意制約、参照制約、テーブル チェック制約など) を参照できます。 |
IS_GRANTABLE (ODBC 1.0) | 8 | Varchar | 権限付与対象ユーザーが他のユーザーに特権を付与できるかどうかを示します。"YES"、"NO"、または "NULL" (不明な場合、またはデータ ソースに適用できない場合)。 特権は、付与可能か、または許可されませんが、両方ではありません。 SQLColumnPrivileges によって返される結果セットには、IS_GRANTABLE列を除くすべての列に同じ値が含まれる 2 つの行が含まれることはありません。 |
コード例
同様の関数のコード例については、「 SQLColumns 関数」を参照してください。
関連する関数
対象 | 解決方法については、 |
---|---|
結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
ステートメント処理の取り消し | SQLCancel 関数 |
テーブルまたはテーブル内の列を返す | SQLColumns 関数 |
データブロックのフェッチまたは結果セットのスクロール | SQLFetchScroll 関数 |
複数行のデータをフェッチする | SQLFetch 関数 |
テーブルまたはテーブルの特権を返す | SQLTablePrivileges 関数 |
データ ソース内のテーブルの一覧を返す | SQLTables 関数 |