仕様: | 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 */
関数引き数
データ・タイプ | 引き数 | 使用法 | 説明 |
---|---|---|---|
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() を呼び出すようにすることができます。
将来のリリースでは、列が新たに追加されたり、既存の列の名前が変更されたりする可能性はありますが、現行の列の位置が変更されることはありません。
これは、「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 属性を使用して設定することができます。 |
制約
なし。
(ここで完全サンプル 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);
参照