CLI の手引きおよび解説書

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

目的


仕様: DB2 CLI 2.1 ODBC 1.0  

SQLForeignKeys() は、指定された表の外部キーに関する情報を返します。情報は SQL 結果セット内に返されますが、これは、照会で生成された結果を検索するのに使用される関数と同じ関数を使用して処理することができます。

構文

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 */

関数引き数


表 79. SQLForeignKeys 引き数
データ・タイプ 引き数 使用法 説明
SQLHSTMT StatementHandle 入力 ステートメント・ハンドル
SQLCHAR * PKCatalogName 入力 基本キー表のカタログ修飾子。これは、NULL ポインターまたは長さゼロのストリングでなければなりません。
SQLSMALLINT NameLength1 入力 PKCatalogName の長さ。これは、0 に設定する必要があります。
SQLCHAR * PKSchemaName 入力 基本キー表のスキーマ修飾子。
SQLSMALLINT NameLength2 入力 PKSchemaName の長さ。
SQLCHAR * PKTableName 入力 基本キーを含む表名の名前。
SQLSMALLINT NameLength3 入力 PKTableName の長さ。
SQLCHAR * FKCatalogName 入力 外部キーを含む表のカタログ修飾子。これは、NULL ポインターまたは長さゼロのストリングでなければなりません。
SQLSMALLINT NameLength4 入力 FKCatalogName の長さ。これは、0 に設定する必要があります。
SQLCHAR * FKSchemaName 入力 外部キーを含む表のスキーマ修飾子。
SQLSMALLINT NameLength5 入力 FKSchemaName の長さ。
SQLCHAR * FKTableName 入力 外部キーを含む表の名前。
SQLSMALLINT NameLength6 入力 FKTableName の長さ。

使用法

PKTableName に表名が含まれており、 FKTableName が空ストリングである場合、 SQLForeignKeys() は指定された表の基本キーとその表を参照するすべての外部キー (他の表の中にある) を含む結果セットを返します。

FKTableName に表名が含まれており、 PKTableName が空ストリングである場合、 SQLForeignKeys() は指定された表のすべての外部キーとそれらのキーが参照する基本キー (他の表の中にある) を含む結果セットを返します。

PKTableNameFKTableName の両方に表名が含まれている場合、 SQLForeignKeys()FKTableName で指定された表の外部キーを返しますが、これらの外部キーは PKTableName で指定された表の基本キーを参照します。これは、最大 1 つのキーでなければなりません。

表名に関連したスキーマ修飾子引き数を指定しないと、スキーマ名は現行の接続にとって現在有効であるものに省略時設定されます。

表 80 には、 SQLForeignKeys() 呼び出しで生成された結果セットの列をリストしています。基本キーに関連した外部キーを要求すると、結果セットは FKTABLE_CAT、FKTABLE_SCHEM、 FKTABLE_NAME、そして ORDINAL_POSITION の順序になります。外部キーに関連した基本キーが要求されると、結果セットは PKTABLE_CAT、PKTABLE_SCHEM、 PKTABLE_NAME、そして ORDINAL_POSITION の順序になります。

カタログ関数の結果セットの VARCHAR 列は、SQL92 の制限に従うように、 128 の最大長属性で宣言されています。 DB2 名は 128 より小さいため、アプリケーションは出力バッファー用に常に 128 文字 (にヌル終止符を加えたもの) を確保するようにしたり、あるいは、SQL_MAX_CATALOG_NAME_LEN、 SQL_MAX_SCHEMA_NAME_LEN、 SQL_MAX_TABLE_NAME_LEN、および SQL_MAX_COLUMN_NAME_LEN を指定して SQLGetInfo() を呼び出し、接続している DBMS でサポートされる関連付けられた TABLE_CAT、 TABLE_SCHEM、 TABLE_NAME、および COLUMN_NAME 列の実際の長さをそれぞれ判別することができます。

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


表 80. SQLForeignKeys で返される列
列番号 / 名 データ・タイプ 説明
1 PKTABLE_CAT VARCHAR(128) これは常に NULL です。
2 PKTABLE_SCHEM VARCHAR(128) PKTABLE_NAME を含むスキーマの名前。
3 PKTABLE_NAME 非 NULL の VARCHAR(128) 基本キーを含む表の名前。
4 PKCOLUMN_NAME 非 NULL の VARCHAR(128) 基本キー列名。
5 FKTABLE_CAT VARCHAR(128) これは常に NULL です。
6 FKTABLE_SCHEM VARCHAR(128) FKTABLE_NAME を含むスキーマの名前。
7 FKTABLE_NAME 非 NULL の VARCHAR(128) 外部キーを含む表の名前。
8 FKCOLUMN_NAME 非 NULL の VARCHAR(128) 外部キー列名。
9 ORDINAL_POSITION 非 NULL の SMALLINT 1 から始まるキー内の列の順序を示す位置。
10 UPDATE_RULE SMALLINT SQL 操作が UPDATE であるときに外部キーに適用されるアクション。
  • SQL_RESTRICT
  • SQL_NO_ACTION

IBM DB2 DBMS の更新規則は、常に RESTRICT または SQL_NO_ACTION のいずれかです。しかし、ODBC アプリケーションは IBM 以外の DBMS に接続されると、以下の UPDATE_RULE 値を検出する場合があります。

  • SQL_CASCADE
  • SQL_SET_NULL
11 DELETE_RULE SMALLINT SQL 操作が DELETE であるときに外部キーに適用されるアクション。
  • SQL_CASCADE
  • SQL_NO_ACTION
  • SQL_RESTRICT
  • SQL_SET_DEFAULT
  • SQL_SET_NULL
12 FK_NAME VARCHAR(128) 外部キー識別子。データに適用できない場合は、NULL。
13 PK_NAME VARCHAR(128) 基本キー識別子。データに適用できない場合は、NULL。
14 DEFERRABILITY SMALLINT 以下のいずれかです。
  • SQL_INITIALLY_DEFERRED
  • SQL_INITIALLY_IMMEDIATE
  • SQL_NOT_DEFERRABLE
注:DB2 CLI が使用する列名は、X/Open CLI CAE 仕様のスタイルに準拠しています。列タイプ、内容、および順序は、 ODBC の SQLForeignKeys() 結果セットで定義されているものと同じです。

戻りコード

診断


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

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

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

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

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

表または所有者名の長さが、サーバーによってサポートされている最大長より長くなっています。 SQLGetInfo - 一般情報の入手を参照してください。

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 */
/* ... */
    /* fetch each row, and display */
    printf("    Fetch each row and display.\n");
    sqlrc = SQLFetch( hstmt );
 
 

参照


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