16.10.3 SQLForeignKeys,SQLForeignKeysW
(1) 機能
次の外部キーの列情報をSQLの結果セットの形式で返します。
-
指定されたテーブルの外部キー一覧(別のテーブルの主キーを参照する指定をされたテーブルの列)
-
指定されたテーブルの主キーを参照する,別のテーブルの外部キー一覧
(2) 形式
-
SQLForeignKeysの場合
SQLRETURN SQLForeignKeys ( SQLHSTMT StatementHandle, /* In */ SQLCHAR * PKCatalogName, /* In */ SQLSMALLINT NameLength1, /* In */ SQLCHAR * PKSchemaName, /* In */ SQLSMALLINT NameLength2, /* In */ SQLCHAR * PKTableName, /* In */ SQLSMALLINT NameLength3, /* In */ SQLCHAR * FKCatalogName, /* In */ SQLSMALLINT NameLength4, /* In */ SQLCHAR * FKSchemaName, /* In */ SQLSMALLINT NameLength5, /* In */ SQLCHAR * FKTableName, /* In */ SQLSMALLINT NameLength6 /* In */ )
-
SQLForeignKeysWの場合
SQLRETURN SQLForeignKeysW ( SQLHSTMT StatementHandle, /* In */ SQLWCHAR * PKCatalogName, /* In */ SQLSMALLINT NameLength1, /* In */ SQLWCHAR * PKSchemaName, /* In */ SQLSMALLINT NameLength2, /* In */ SQLWCHAR * PKTableName, /* In */ SQLSMALLINT NameLength3, /* In */ SQLWCHAR * FKCatalogName, /* In */ SQLSMALLINT NameLength4, /* In */ SQLWCHAR * FKSchemaName, /* In */ SQLSMALLINT NameLength5, /* In */ SQLWCHAR * FKTableName, /* In */ SQLSMALLINT NameLength6 /* In */ )
(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を指定します。PKTableNameにNULLを指定した場合,この引数は無視されます。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を指定します。PKTableNameにNULLを指定した場合,この引数は無視されます。PKTableNameにNULL以外の値を指定して,この引数に0を指定した場合,PKTableNameに空の文字列を指定したときと同じ動作になります。
- 注※
-
長さの単位は,SQLForeignKeysの場合はバイト長,SQLForeignKeysWの場合は文字数となります。
PKTableNameおよびFKTableNameの指定値の組み合わせと,その組み合わせによって返却される結果セットを次の表に示します。
PKTableName |
FKTableName |
返却される結果セット |
---|---|---|
NULL |
NULL |
−(エラー) |
Not NULL |
NULL |
PKTableNameに指定されたテーブルの主キーと,その主キーを参照する別テーブルの外部キーの情報を返します。 PKTableNameに指定されたテーブルのユニーク制約だけのキーを参照する別テーブルの外部キーの情報は返しません。 |
NULL |
Not NULL |
FKTableNameに指定されたテーブルの外部キーと,その外部キーが参照する別テーブルの主キーの情報を返します。 別テーブルのユニーク制約だけのキーを参照するFKTableNameに指定されたテーブルの外部キーの情報は返しません。 |
Not NULL |
Not NULL |
FKTableNameに指定されたテーブルの外部キーと,その外部キーが参照するテーブルの主キーの情報を返します。この外部キーは,PKTableNameに指定されたテーブルの主キーだけを参照します。 |
(4) 戻り値
SQL_SUCCESS,SQL_SUCCESS_WITH_INFO,SQL_ERROR,またはSQL_INVALID_HANDLEが返されます。
SQLForeignKeysまたはSQLForeignKeysWを実行すると結果セットが作成されます。返却される結果セットの形式を次に示します。
列番号 |
型 |
列名 |
列の意味 |
---|---|---|---|
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文が要求されたときに,外部キーに適用される動作を返します。
|
11 |
Smallint |
DELETE_RULE |
削除を行うSQL文が要求されたときに,外部キーに適用される動作を返します。
|
12 |
Varchar |
FK_NAME |
外部キー名を返します。 |
13 |
Varchar |
PK_NAME |
主キー名を返します。 |
14 |
Smallint |
DEFERRABILITY |
外部キーに対する制約のチェックを遅延するかどうかを返します。
|
(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ユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。