別名とシノニム
表またはビューは、SQL ステートメントの中でその名前を使って参照できます。 また、その名前に対して定義された別名、あるいはその名前に対して 定義されたシノニムによって参照することもできます。このように、別名とシノニムは、表およびビューの代替名と考えることができます。
別名はローカル・サーバーで定義することができ、現行サーバーまたは リモート・サーバーにある表またはビューを参照することができます。 別名は、SQL ステートメントの中で表またはビューを指すために表名またはビュー名を使えるところであれば、どこでも使用することができます。 別名を作成する際の規則は、後述する表名またはビュー名を作成する際の規則と同じです。 完全修飾の別名 (3 部構成の名前) は、リモート・サーバーにある別名を示すことができます。 ただし、リモート・サーバーで別名によって識別される表またはビューは、リモート・サ ーバーに存在しなければなりません。
別名は、CREATE ALIAS、DROP ALIAS、COMMENT ON ALIAS、およ び LABEL ON ALIAS の場合のように、キーワード ALIAS を前 に付けることで、別名であることを示します。 これ以外では、別名は表またはビューを示します。例えば、COMMENT ON ALIAS A は、別名 A に関するコメントを指定します。 一方、COMMENT ON TABLE A は、A という名前の表またはビューに関するコメントを指定します。
シノニムは、CREATE SYNONYM や DROP SYNONYM の場合のように、 キーワード SYNONYM を前に付けることで、シノニムであることを示します。これ以外では、シノニムはローカルの表またはビューを示すものであり、 SQL ステートメントの中で表またはビューの名前を使えるところであれば、 どこでも使用することができます。
3 部構成の名前を使用し、分散データを参照するステートメントは、結果として、 リモート・サイトへの DRDA アクセスを行います。3 部構成の名前 に DRDA アクセスが使用されるのは、分散データに対する照会を含むプランまたはパッケージが バインド・オプション DBPROTOCOL(DRDA) を使用してバインドされている場合、 またはインストール・パネル DSNTIP5 のフィールド DATABASE PROTOCOL の値 が DRDA である場合です。 アプリケーション・プログラムがリモート・オブジェクトと DRDA アクセスに 3 部構成の名前の別名 を使用する場合、アプリケーション・プログラムは、3 部構成の名前に指定されているロケー ションごとにバインドする必要があります。 また、各別名はローカル・サイトで定義する必要があります。 リモート・サイトでの別名は、参照される別名が結果的に表または ビューを参照している限り、さらに別のサーバーを参照することができます。
別名またはシノニムによって表またはビューを参照するという オプションは、構文図には明示されていません。 また、SQL ステートメントの解説でも触れていません。ただし、2 つの例外を除き、SQL ステートメント内でこれらを参照することは可能です。例外は、CREATE ALIAS ステートメント内でローカル別名を使用できないことと、CREATE SYNONYM ステートメント内でシノニムを使用できないことです。CREATE SYNONYM ステートメント内で別名を使う場合は、現行サーバーにある 表またはビューを示すものでなければなりません。 シノニムは、その表またはビューの名前に定義されます。CREATE ALIAS ステートメント内でシノニムを使った場合には、そのシノニムによって識別される表またはビューの名前に別名が定義されます。
SQL ステートメントで別名またはシノニムを使うと、テキスト置換 が行われることになります。例えば、A が表 Q.T の別名であるとすれば、SELECT * FROM A の 準備における 1 つのステップとして、「A」が「Q.T」に 置換されます。同様に、S が表 Q.T のシノニムであるとすれば、SELECT * FROM S の準備にお ける 1 つのステップとして、「S」が「Q.T」に置換されます。
別名とシノニムの違いは、以下のとおりです。
- 別名を定義するには、許可または CREATE ALIAS 特権が必要です。シノニムの定義には許可は必要としません。
- 別名は、現行サーバーにない表やビューも含めて、表または ビューの名前に定義することができます。シノニムは、現行サーバーにある表またはビューの名前にしか定義できません。
- 別名は、未定義の名前に定義できます。シノニムは、既存の表またはビューの名前にしか定義できません。
- 表またはビューをドロップしても、その別名への影響はありません。しかし、表またはビューをドロップすると、そのシノニムもドロップされます。
- 別名は、どの許可 ID によっても使うことができる修飾名です。 新しい別名には、既存の別名、表、またはビューと同じ完全修飾名を付けることはできません。また、新しい別名の非修飾名を既存のシノニムと同じ名前にすることはできません。
- シノニムは、そのシノニムの所有者のみが使用できる非修飾名です。新しいシノニムには、既存のシノニムと同じ名前や、既存の別名、表、またはビューの非修飾名と同じ名前を付けることはできません。
- ある DB2 サブシステムで定義された別名は、別の DB2 サブシステム でも使うことができます。 シノニムは、それが定義された DB2 サブシステムでしか使えません。
- 別名を使う時は、それが示している名前が未定義の場合、 あるいはその名前が現行サーバーにある別名の場合には、エラーが発生します。 (別名は異なるサーバーでは別の別名を表すことができ、またこの 別名はさらに別のサーバーではまた別の別名を表すことができるというように、 参照される別名が最終的に表またはビューを表すかぎりこのように続きます。) シノニムを使う場合には、このエラーは起こりません。
- ROLE AS OBJECT OWNER が有効なトラステッド・コンテキストでは、シノニムを作成することはできません。