GET_FOREIGN_KEYS¶
説明
ストアドプロシージャ GET_FOREIGN_KEYS
は、各ビューの外部キーを返します。結果の各行は、外部キーのフィールドを表します。このプロシージャは、 GET_EXPORTED_KEYS の 反対 です。
外部キーは、別のビューまたは同じビューの行を一意に識別するビューのフィールド (または一連のフィールド) です。たとえば、以下のビューがあるとします。
Order: プライマリキーは「id」です。
Order_details: このビューにはフィールド「order_id」があります。このフィールドの値は、このビューが属す注文の ID です。
これらを使用して外部キーを定義するには、「order」と「order_details」の間にアソシエーションを作成する必要があります。
「order_details」の「order_id」と「order」の「id」の間でマッピングを行う必要があります。
[Referential constraint] オプションを選択します。そうしないと、外部キーとは見なされなくなります。
エンドポイント「order」は プリンシパル であり、「player」は 依存側 です。
エンドポイント「order」のカーディナリティは 1 です。これは、「order_details」の行は「order」の 1 つの行のみを参照できることを意味します。
これらが役立つ理由と、その作成方法については、管理ガイドの「 Associations 」で説明しています。
構文
GET_FOREIGN_KEYS (
input_database_name : text
, input_view_name : text
)
input_database_name
およびinput_view_name
がnull
の場合、このプロシージャはすべてのデータベースのすべてのビューの外部キーを返します。input_view_name
がnull
の場合、このプロシージャはそのデータベースのすべてのビューの外部キーを返します。
このプロシージャは、以下のフィールドを返します。
pk_database_name
: プライマリキーのビューが属すデータベースの名前。pk_view_name
: プライマリキーのビューの名前。pk_column_name
: プライマリキーの一部であるフィールドの名前。pk_name
: プライマリキーの名前。fk_database_name
: 外部キーのビューが属すデータベースの名前。fk_view_name
: 外部キーのビューの名前。fk_column_name
: 外部キーの一部であるフィールドの名前。fk_name
: アソシエーションの名前。
必要な権限
このプロシージャの結果は、それを実行するユーザーに付与されている権限によって異なります。ユーザーが管理者ユーザーではない場合、以下の点に注意してください。
パラメータ
input_database_name
がnull
ではない場合、ユーザーがこのデータベースに対する CONNECT 権限を持っていないと、このプロシージャはエラーを返します。ユーザーがビューおよび参照先のビューに対する
METADATA
権限を持っている場合、このプロシージャはそのビューの外部キーに関する情報のみを返します。
例
以下の図のような 3 つのビューがあるとします。
以下の図は、ビュー「player」と「game」の間のアソシエーションの構成を示しています。
例 1
SELECT pk_view_name, pk_column_name, pk_name, fk_view_name, fk_column_name, fk_name
FROM get_exported_keys()
WHERE input_database_name = 'example'
pk_view_name |
pk_column_name |
pk_name |
fk_view_name |
fk_column_name |
fk_name |
---|---|---|---|---|---|
player |
id_player |
PRIMARY |
winner |
player_fk |
winner_player |
game |
id_game |
PRIMARY |
player |
game_fk |
game_player |
入力パラメータ「input_view_name」に値を渡さないか、 null
を渡した場合、このプロシージャの結果は GET_EXPORTED_KEYS
と同じです。
例 2
SELECT pk_view_name, pk_column_name, pk_name, fk_view_name, fk_column_name, fk_name
FROM get_foreign_keys()
WHERE input_database_name = 'example' and input_view_name='player'
結果は以下のとおりです。
pk_view_name |
pk_column_name |
pk_name |
fk_view_name |
fk_column_name |
fk_name |
---|---|---|---|---|---|
game |
id_game |
PRIMARY |
player |
game_fk |
game_player |
例 3
SELECT pk_view_name, pk_column_name, pk_name, fk_view_name, fk_column_name, fk_name
FROM get_foreign_keys()
WHERE input_database_name = 'example' and input_view_name='game'
ビュー「game」を参照する外部キーが存在しないため、このクエリは行を返しません。
GET_EXPORTED_KEYS プロシージャの例を参照して、両方のプロシージャの違いについて理解を深めてください。