CLI の手引きおよび解説書

SQLTablePrivileges - 表に関連した特権の入手

目的


仕様: DB2 CLI 2.1 ODBC 1.0  

SQLTablePrivileges() は、表と各表の関連特権のリストを戻します。情報は SQL 結果セット内に戻されますが、照会により作成された結果セットを処理するのに使用される関数と同じ関数を使用して情報を取り出すことができます。

構文

SQLRETURN SQLTablePrivileges (
                SQLHSTMT          StatementHandle,   /* hstmt */
                SQLCHAR      FAR  *CatalogName,      /*  szCatalogName */
                SQLSMALLINT       NameLength1,       /* cbCatalogName */
                SQLCHAR      FAR  *SchemaName,       /* szSchemaName */
                SQLSMALLINT       NameLength2,       /* cbSchemaName */
                SQLCHAR      FAR  *TableName,        /* szTableName */
                SQLSMALLINT       NameLength3);      /* cbTableName */

関数引き数


表 176. SQLTablePrivileges 引き数
データ・タイプ 引き数 使用法 説明
SQLHSTMT StatementHandle 入力 ステートメント・ハンドル。
SQLCHAR * szTableQualifier 入力 3 つの部分から成る表名のカタログ修飾子。これは、ヌル・ポインターまたは長さゼロのストリングでなければなりません。
SQLSMALLINT cbTableQualifier 入力 CatalogName の長さ。これは、0 に設定する必要があります。
SQLCHAR * SchemaName 入力 スキーマ名で結果セットを修飾するためのパターン値 を入れられるバッファー。
SQLSMALLINT NameLength2 入力 SchemaName の長さ。
SQLCHAR * TableName 入力 表名で結果セットを修飾するためのパターン値 を入れられるバッファー。
SQLSMALLINT NameLength3 入力 TableName の長さ。

SchemaName 引き数と TableName 引き数は検索パターンを受け入れることに注意してください。有効な検索パターンの詳細については、カタログ関数での入力引き数を参照してください。

使用法

結果は、次の表にリストされている列を含む標準結果セットとして戻されます。結果セットは、TABLE_CAT、TABLE_SCHEM、TABLE_NAME、そして PRIVILEGE の順序になっています。指定の表に複数の特権が関連している場合、各特権は個別の行として戻されます。

ここに報告されている各特権の細分性は、列単位で当てはまる場合と当てはまらない場合があります。たとえば、データ・ソースによっては、表が更新可能であればその表の中の各列も更新可能な場合があります。他のデータ・ソースの場合は、個々の列が同じ表特権をもっている場合、アプリケーションは SQLColumnPrivileges() を呼び出す必要があります。

ほとんどの場合、 SQLTablePrivileges() への呼び出しはシステム・カタログに対して複雑で、それゆえに高価な照会へとマップされるので、使用を節約する必要があります。それで、呼び出しを繰り返すよりも、結果を保管しておくほうが良いでしょう。

カタログ関数の結果セットの VARCHAR 列は、 SQL92 の制限に従うように、128 の最大長属性で宣言されています。 DB2 名は 128 文字未満なので、アプリケーションは、出力バッファー用に 128 文字 (およびヌル終止符) を常にとっておくか、あるいは、接続している DBMS がサポートしている TABLE_CAT、TABLE_SCHEM、 TABLE_NAME、および COLUMN_NAME 列の実際の長さを判別するために、 SQL_MAX_CATALOG_NAME_LEN、 SQL_MAX_OWNER_SCHEMA_LEN、SQL_MAX_TABLE_NAME_LEN、および SQL_MAX_COLUMN_NAME_LEN を使用して、選択的に SQLGetInfo() を呼び出すようにすることができます。

将来のリリースでは、列が新たに追加されたり、既存の列の名前が変更されたりする可能性はありますが、現行の列の位置が変更されることはありません。

SQLTablePrivileges で戻される列

列 1 TABLE_CAT (VARCHAR(128))
これは常にヌルです。

列 2 TABLE_SCHEM (VARCHAR(128))
TABLE_NAME を含むスキーマの名前。

列 3 TABLE_NAME (VARCHAR(128) 非 NULL)
表の名前。

列 4 GRANTOR (VARCHAR(128))
特権を付与したユーザーの許可 ID。

列 5 GRANTEE (VARCHAR(128))
特権が付与されたユーザーの許可 ID。

列 6 PRIVILEGE (VARCHAR(128))
表特権。これは、次のストリングのうちの 1 つとすることができます。

列 7 IS_GRANTABLE (VARCHAR(3))
特権を付与されたユーザーが他のユーザーに特権を付与できるかどうかを示します。

これは、「YES」、「NO」、または NULL のどれかです。

注:DB2 CLI が使用する列名は、X/Open CLI CAE 仕様のスタイルに準拠しています。列タイプ、内容、および順序は、 ODBC の SQLProcedures() 結果セットで定義されているものと同じです。

戻りコード

診断


表 177. SQLTablePrivileges SQLSTATE
SQLSTATE 説明 解説
24000 カーソル状態が無効です。 カーソルはすでに、ステートメント・ハンドル上にオープンされています。
40003 08S01 通信リンクに障害が起きました。 アプリケーションとデータ・ソースとの間の通信リンクが、関数の完了する前に失敗しました。
HY001 メモリーの割り振り失敗です。 DB2 CLI は、関数の実行または完了をサポートするのに必要なメモリーを割り振ることができません。
HY008 操作が取り消しになりました。

非同期処理が StatementHandle に対して使用可能になりました。関数が呼び出され、その実行が完了する前に、 SQLCancel()StatementHandle で呼び出されました。そして、関数が再び StatementHandle で呼び出されました。

関数が呼び出され、その実行が完了する前に、 SQLCancel() が複数スレッドのアプリケーション内の別のスレッドから、 StatementHandle で呼び出されました。

HY009 引き数値が無効です。 TableName はヌルです。
HY010 関数の順序エラーです。

実行時データ (SQLParamData()SQLPutData()) 操作中に、関数が呼び出されました。

BEGIN COMPOUND と END COMPOUND SQL の操作中に、関数が呼び出されました。

非同期実行関数 (この関数ではない) が StatementHandle で呼び出され、この関数は、呼び出し時に依然実行中でした。

HY014 もはやハンドルはありません。 DB2 CLI は、内部資源が原因でハンドルを割り当てることができませんでした。
HY090 ストリングまたはバッファー長が無効です。 名前の長さ引き数のうちの 1 つの値は 0 より小さい値でしたが、 SQL_NTS と等しくありませんでした。

名前の長さ引き数のうちの 1 つの有効値は、そのデータ・ソースについてサポートされる最大値を超えました。 SQLGetInfo() 関数を呼び出して、サポートされる最大値を取得することができます。

HYC00 ドライバーが機能していません。 DB2 CLI は、表名の修飾子としてカタログ をサポートしません。
HYT00 タイムアウトになりました。 データ・ソースが結果セットを返す前に、タイムアウト期間が満了しました。タイムアウトは、 Windows 3.1 や Macintosh System 7 のようなマルチタスクではないシステム上でのみサポートされています。タイムアウト期間は、 SQLSetConnectAttr() の SQL_ATTR_QUERY_TIMEOUT 属性を使用して設定することができます。

制約

なし。

CLI サンプル tbinfo.c

(ここで完全サンプル tbinfo.c を使用することもできます 。)

/* From the CLI sample TBINFO.C */
/* ... */
    /* call SQLTablePrivileges */
    printf("\n    Call SQLTablePrivileges for:\n");
    printf("        tbSchemaPattern = %s\n", tbSchemaPattern);
    printf("        tbNamePattern = %s\n", tbNamePattern);
    sqlrc = SQLTablePrivileges( hstmt, NULL, 0,
                                tbSchemaPattern, SQL_NTS,
                                tbNamePattern, SQL_NTS);
    STMT_HANDLE_CHECK( hstmt, sqlrc);
 
 

参照


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]