Hitachi

Hitachi Advanced Data Binder AP開発ガイド


16.10.3 SQLForeignKeys,SQLForeignKeysW

〈この項の構成〉

(1) 機能

次の外部キーの列情報をSQLの結果セットの形式で返します。

(2) 形式

(3) 引数

StatementHandle

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandle*OutputHandlePtrで出力された値を指定します。

PKCatalogName

主キーのテーブルのカタログ名を指定します。ただし,指定しても無視されます。この関数を使用する際は,空の文字列(""),またはNULLを指定します。

NameLength1

*PKCatalogNameの長さ,またはSQL_NTSを指定します。ただし,指定しても無視されます。この関数を使用する際は,0を指定します。

PKSchemaName

主キーのテーブルのスキーマ名を指定します。NULLを指定した場合は,すべてのスキーマ名を対象とします。

NameLength2

*PKSchemaNameの長さ,またはSQL_NTSを指定します。0を指定した場合は,すべてのスキーマ名を対象とします。

PKTableName

主キーのテーブル名を指定します。指定する値については,「表16‒15 PKTableNameおよびFKTableNameの指定値の組み合わせと,その組み合わせによって返却される結果セット」を参照してください。空の文字列を指定した場合,結果セットの行数は0になります。

NameLength3

*PKTableNameの長さ,またはSQL_NTSを指定します。PKTableNameNULLを指定した場合,この引数は無視されます。PKTableNameにNULL以外の値を指定して,この引数に0を指定した場合,PKTableNameに空の文字列を指定したときと同じ動作になります。

FKCatalogName

外部キーのテーブルのカタログ名を指定します。ただし,指定しても無視されます。この関数を使用する際は,空の文字列(""),またはNULLを指定します。

NameLength4

*FKCatalogNameの長さ,またはSQL_NTSを指定します。ただし,指定しても無視されます。この関数を使用する際は,0を指定します。

FKSchemaName

外部キーのテーブルのスキーマ名を指定します。NULLを指定した場合は,すべてのスキーマ名を対象とします。

NameLength5

*FKSchemaNameの長さ,またはSQL_NTSを指定します。0を指定した場合は,すべてのスキーマ名を対象とします。

FKTableName

外部キーのテーブル名を指定します。指定する値については,「表16‒15 PKTableNameおよびFKTableNameの指定値の組み合わせと,その組み合わせによって返却される結果セット」を参照してください。空の文字列を指定した場合,結果セットの行数は0になります。

NameLength6

*FKTableNameの長さ,またはSQL_NTSを指定します。PKTableNameNULLを指定した場合,この引数は無視されます。PKTableNameNULL以外の値を指定して,この引数に0を指定した場合,PKTableNameに空の文字列を指定したときと同じ動作になります。

注※

長さの単位は,SQLForeignKeysの場合はバイト長,SQLForeignKeysWの場合は文字数となります。

PKTableNameおよびFKTableNameの指定値の組み合わせと,その組み合わせによって返却される結果セットを次の表に示します。

表16‒15 PKTableNameおよびFKTableNameの指定値の組み合わせと,その組み合わせによって返却される結果セット

PKTableName

FKTableName

返却される結果セット

NULL

NULL

−(エラー)

Not NULL

NULL

PKTableNameに指定されたテーブルの主キーと,その主キーを参照する別テーブルの外部キーの情報を返します。

PKTableNameに指定されたテーブルのユニーク制約だけのキーを参照する別テーブルの外部キーの情報は返しません。

NULL

Not NULL

FKTableNameに指定されたテーブルの外部キーと,その外部キーが参照する別テーブルの主キーの情報を返します。

別テーブルのユニーク制約だけのキーを参照するFKTableNameに指定されたテーブルの外部キーの情報は返しません。

Not NULL

Not NULL

FKTableNameに指定されたテーブルの外部キーと,その外部キーが参照するテーブルの主キーの情報を返します。この外部キーは,PKTableNameに指定されたテーブルの主キーだけを参照します。

(4) 戻り値

SQL_SUCCESSSQL_SUCCESS_WITH_INFOSQL_ERROR,またはSQL_INVALID_HANDLEが返されます。

SQLForeignKeysまたはSQLForeignKeysWを実行すると結果セットが作成されます。返却される結果セットの形式を次に示します。

表16‒16 返却される結果セットの形式

列番号

列名

列の意味

1

Varchar

PKTABLE_CAT

常にナル値を返します。

2

Varchar

PKTABLE_SCHEM

主キーのスキーマ名を返します。スキーマ名がない場合,空の文字列を返します。

3

Varchar

PKTABLE_NAME

主キーの表名を返します。

4

Varchar

PKCOLUMN_NAME

主キーの列名を返します。列名がない場合,空の文字列を返します。

5

Varchar

FKTABLE_CAT

常にナル値を返します。

6

Varchar

FKTABLE_SCHEM

外部キーのスキーマ名を返します。スキーマ名がない場合,空の文字列を返します。

7

Varchar

FKTABLE_NAME

外部キーの表名を返します。

8

Varchar

FKCOLUMN_NAME

外部キーの列名を返します。列名がない場合,空の文字列を返します。

9

Smallint

KEY_SEQ

1から始まる外部キーの列順の番号を返します。

10

Smallint

UPDATE_RULE

更新を行うSQL文が要求されたときに,外部キーに適用される動作を返します。

  • SQL_NO_ACTION

    主キーの値の更新,または外部キーの値の更新によって,外部キーの値に対応する主キーの値がない場合,更新はできません。ただし,CREATE TABLE文の参照制約定義で参照制約チェック抑止指定(DISABLE)を指定した場合は,主キーの値または外部キーの値を更新できます。

11

Smallint

DELETE_RULE

削除を行うSQL文が要求されたときに,外部キーに適用される動作を返します。

  • SQL_NO_ACTION

    参照先テーブルの行削除によって,外部キーの値に対応する主キーの値がない場合,行削除はできません。ただし,CREATE TABLE文の参照制約定義で参照制約チェック抑止指定(DISABLE)を指定した場合は,行を削除できます。

12

Varchar

FK_NAME

外部キー名を返します。

13

Varchar

PK_NAME

主キー名を返します。

14

Smallint

DEFERRABILITY

外部キーに対する制約のチェックを遅延するかどうかを返します。

  • SQL_NOT_DEFERRABLE

    SQL文が実行されるたびに制約がチェックされます。遅延できるように変更することはできません。

(5) SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

5C002

文字コード変換エラーが発生

変換できない文字コードを検出しました。

HY000

一般エラー

×

HY001

メモリ割り当てエラー

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

PKTableNameおよびFKTableNameの両方がNULLです。

HY010

関数シーケンスエラー

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が,対応する名前の最大長を超えました。

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

(凡例)

○:HADB ODBCドライバが返すことがあるSQLSTATEです。

×:HADB ODBCドライバが返さないSQLSTATEです。

−:なし。

(6) 注意事項

この関数を実行したHADBユーザが持っている権限によって,取得できる外部キーの情報が変わります。権限と取得できる情報の対応については,マニュアルHADB システム構築・運用ガイドHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。