SQLForeignKeys - 外部キー列のリストの入手

目的

仕様: DB2 CLI 2.1 ODBC 1.0

SQLForeignKeys() は指定された表の外部キーに関する情報を戻します。 この情報は SQL 結果セットに戻されます。この結果セットは、照会で生成された結果セットの取り出しに使用するものと同じ関数を使用して処理することができます。 PKCatalogNameNameLength1PKSchemaNameNameLength2FKCatalogNameNameLength4FKSchemaNameNameLength5 は無視されます。戻された 結果セットの列 1、2、5、6、12、および 13 は、常に長さがゼロのストリングです。 戻された結果セットの列 10、11、および 14 は常にゼロ。

構文

SQLRETURN   SQLForeignKeys  (
                  SQLHSTMT          StatementHandle,  /* hstmt */
                  SQLCHAR      *FAR PKCatalogName,    /* szPkCatalogName */
                  SQLSMALLINT       NameLength1,      /* cbPkCatalogName */
                  SQLCHAR      *FAR PKSchemaName,     /* szPkSchemaName */
                  SQLSMALLINT       NameLength2,      /* cbPkSchemaName */
                  SQLCHAR      *FAR PKTableName,      /* szPkTableName */
                  SQLSMALLINT       NameLength3,      /* cbPkTableName */
                  SQLCHAR      *FAR FKCatalogName,    /* szFkCatalogName */
                  SQLSMALLINT       NameLength4       /* cbFkCatalogName */
                  SQLCHAR      *FAR FKSchemaName,     /* szFkSchemaName */
                  SQLSMALLINT       NameLength5,      /* cbFkSchemaName */
                  SQLCHAR      *FAR FKTableName,      /* szFkTableName */
                  SQLSMALLINT       NameLength6);     /* cbFkTableName */
 

関数の引き数

表 58. SQLForeignKeys の引き数

データ・タイプ 引き数 用途 説明
SQLHSTMT StatementHandle 入力 ステートメント・ハンドル。
SQLCHAR* PKCatalogName 入力 主キー表のカタログ修飾子。 このフィールドは、DB2 Everyplace では無視されます。
SQLSMALLINT NameLength1 入力 PKCatalogName の長さ。このフィールドは、DB2 Everyplace では無視されます。
SQLCHAR* PKSchemaName 入力 主キー表のスキーマ修飾子。 このフィールドは、DB2 Everyplace では無視されます。
SQLSMALLINT NameLength2 入力 PKSchemaName の長さ。このフィールドは、DB2 Everyplace では無視されます。
SQLCHAR* PKTableName 入力 主キーが入っている表の名前。
SQLSMALLINT NameLength3 入力 PKTableName の長さ。
SQLCHAR* FKCatalogName 入力 外部キーが入っている表のカタログ修飾子。このフィールドは、DB2 Everyplace では無視されます。
SQLSMALLINT NameLength4 入力 FKCatalogName の長さ。このフィールドは、DB2 Everyplace では無視されます。
SQLCHAR* FKSchemaName 入力 外部キーが入っている表のスキーマ修飾子。 このフィールドは、DB2 Everyplace では無視されます。
SQLSMALLINT NameLength5 入力 FKSchemaName の長さ。このフィールドは、DB2 Everyplace では無視されます。
SQLCHAR* FKTableName 入力 外部キーが入っている表の名前。
SQLSMALLINT NameLength6 入力 FKTableName の長さ。

使用法

PKTableName に表の名前が入っていて、FKTableName が空ストリングで ある場合は、SQLForeignKeys() は指定した表の主キーと、 その表を参照する (他の表に入っている) すべての外部キーが入っている 結果セットを戻します。

FKTableName に表の名前が入っていて、PKTableName が空ストリングで ある場合は、SQLForeignKeys() は指定した表にあるすべての 外部キーとそれらの外部キーが参照する (他の表にある) 主キーが入った結果セットを 戻します。

PKTableNameFKTableName の両方に表の名前が入っている 場合は、SQLForeignKeys()PKTableName に指定されている 表の主キーを参照する、FKTableName に指定された表の中にある外部キーを 戻します。このキーは、1 つのはずです。

主キーに関連付けられた外部キーが要求されると、結果セットは FKTABLE_NAME および ORDINAL_POSITION 順に配列されます。 外部キーに関連付けられた主キーが要求されると、結果セットは PKTABLE_NAME および ORDINAL_POSITION 順に配列されます。

カタログ関数結果セットの VARCHAR 列は、SQL92 の制限と一貫性を持たせるために 最大長属性 128 で宣言されています。

将来のリリースで新規の列が追加されたり、既存の列の名前が変更されても、 現在の列の位置は変わりません。

結果セットには、以下の列が含まれています

列 1 PKTABLE_CAT (VARCHAR(128))
これは常に長さゼロのストリングです。

列 2 PKTABLE_SCHEM (VARCHAR(128))
これは常に長さゼロのストリングです。

列 3 PKTABLE_NAME (VARCHAR(128) 非ヌル)
主キーが入っている表の名前。

列 4 PKCOLUMN_NAME (VARCHAR(128) 非ヌル)
主キーの列名。

列 5 FKTABLE_CAT (VARCHAR(128))
これは常に長さゼロのストリングです。

列 6 FKTABLE_SCHEM (VARCHAR(128))
これは常に長さゼロのストリングです。

列 7 FKTABLE_NAME (VARCHAR(128) 非ヌル)
外部キーが入っている表の名前。

列 8 FKCOLUMN_NAME (VARCHAR(128) 非ヌル)
外部キーの列名。

列 9 ORDINAL_POSITION (SMALLINT 非ヌル)
キー内の列の順序を示す位置。1 から始まります。

列 10 UPDATE_RULE (SMALLINT)
これは常にゼロです。

列 11 DELETE_RULE (SMALLINT)
これは常にゼロです。

列 12 FK_NAME (VARCHAR(128))
これは常に長さゼロのストリングです。

列 13 PK_NAME (VARCHAR(128))
これは常に長さゼロのストリングです。

列 14 DEFERRABILITY (SMALLINT)
これは常にゼロです。

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

戻りコード

診断

表 59. SQLForeign SQLSTATE

SQLSTATE 説明 解説
24000 カーソル状態が無効。 カーソルがすでにこのステートメント・ハンドルでオープンされている。
40003 08S01 通信リンク障害。 関数の完了前に、アプリケーションとデータ・ソース間の通信リンクに障害が生じた。
HY001 メモリーの割り振りの失敗。 DB2 CLI が、関数の実行または完了のサポートに必要なメモリーを 割り当てることができない。
HY009 無効な引き数値。 引き数 PKTableNameFKTableName がともに ヌル・ポインターである。
HY010 関数のシーケンス・エラー。 実行時データ (SQLPrepare() または SQLExecDirect()) の操作中に、 関数が呼び出された。
HY014 ハンドル数の限界に到達済み。 内部リソースが原因で、DB2 CLI がハンドルを割り当てることができない。
HY090 無効なストリング長またはバッファー長。 名前の長さ引き数のいずれかの値が、ゼロより小であるが、SQL_NTS と等しくない。

制約事項

なし。

関連した解説