CLI の手引きおよび解説書

SQLPrimaryKeys - 表の基本キー列を入手する

目的


仕様: DB2 CLI 2.1 ODBC 1.0  

SQLPrimaryKeys() は、表の基本キーを構成する列名のリストを戻します。情報は SQL 結果セット内に戻されますが、照会により作成された結果セットを処理するのに使用される関数と同じ関数を使用して情報を取り出すことができます。

構文

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

関数引き数

表 138. SQLPrimaryKeys 引き数
データ・タイプ 引き数 使用法 説明
SQLHSTMT StatementHandle 入力 ステートメント・ハンドル。
SQLCHAR * CatalogName 入力 3 つの部分から成る表名のカタログ修飾子。

これは、ヌル・ポインターまたは長さゼロのストリングでなければなりません。

SQLSMALLINT NameLength1 入力 CatalogName の長さ。
SQLCHAR * SchemaName 入力 表名のスキーマ修飾子。
SQLSMALLINT NameLength2 入力 SchemaName の長さ。
SQLCHAR * TableName 入力 表名。
SQLSMALLINT NameLength3 入力 TableName の長さ。

使用法

SQLPrimaryKeys() は、シングル表から基本キー列を戻します。検索パターンを使用してスキーマ修飾子または表名を指定することはできません。

結果セットには、『SQLPrimaryKeys で戻される列』にリストされている列が、TABLE_CAT、 TABLE_SCHEM、TABLE_NAME、および ORDINAL_POSITION の順序で含まれています。

ほとんどの場合に SQLPrimaryKeys() に対する呼び出しは、システム・カタログに対し複雑な、またそれゆえに費用のかかる照会へマップされることになるので、その使用を制限しなければなりません。それで何度も呼び出しを行うよりも結果を保管してしまう方が良いでしょう。

カタログ関数の結果セットの VARCHAR 列は、SQL92 の制限に従うように、 128 の最大長属性で宣言されています。 DB2 名は 128 文字よりも少ないので、アプリケーションは、出力バッファー用に 128 文字 (およびヌル終止符) を常にとっておくか、あるいは、接続している DBMS がサポートしている 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() を呼び出すようにすることができます。

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

SQLPrimaryKeys で戻される列

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

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

列 3 TABLE_NAME (VARCHAR(128) 非 NULL)
指定した表の名前。

列 4 COLUMN_NAME (VARCHAR(128) 非 NULL)
基本キー列名。

列 5 ORDINAL_POSITION (SMALLINT 非 NULL)
1 を最初の番号とする基本キー内の列順序番号。

列 6 PK_NAME (VARCHAR(128))
基本キー識別子。データに適用できない場合は、NULL。

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

指定した表に基本キーが含まれていない場合、空の結果セットが戻されます。

戻りコード

診断


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

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

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

HY010 関数の順序エラーです。 実行時データ (SQLParamData()SQLPutData()) 操作中に、関数が呼び出されました。

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

HY014 もはやハンドルはありません。 DB2 CLI は、内部資源が原因でハンドルを割り当てることができませんでした。
HY090 ストリングまたはバッファー長が無効です。 名前の長さ引き数のうちの 1 つの値は 0 より小さい値でしたが、 SQL_NTS と等しくありませんでした。
HYC00 ドライバーが機能していません。 DB2 CLI は、表名の修飾子としてカタログ をサポートしません。
HYT00 タイムアウトになりました。 データ・ソースが結果セットを返す前に、タイムアウト期間が満了しました。タイムアウトは、 Windows 3.1 や Macintosh System 7 のようなマルチタスクではないシステム上でのみサポートされています。タイムアウト期間は、 SQLSetConnectAttr() の SQL_ATTR_QUERY_TIMEOUT 属性を使用して設定することができます。

制約

なし。

CLI サンプル tbconstr.c

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

/* From the CLI sample tbconstr.c */
/* ... */
    /* call SQLPrimaryKeys */
    printf("\n    Call SQLPrimaryKeys for the table %s.%s\n",
            tbSchema, tbName);
    sqlrc = SQLPrimaryKeys(hstmt, NULL, 0,
                        tbSchema, SQL_NTS, tbName, SQL_NTS);
    STMT_HANDLE_CHECK( hstmt, sqlrc ) ;
 
 

参照


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