SQL 解説書
CREATE NICKNAME ステートメントは、データ・ソース表または視点のニックネームを作成します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むか、
あるいは動的 SQL ステートメントの使用によって発行することができます。
このステートメントは、動的に準備可能な実行可能ステートメントです。
しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、
ステートメントを動的に準備することはできません (SQLSTATE 42509)。
許可
このステートメントの許可 ID には、以下の特権が少なくとも 1 つ含まれている必要があります。
- SYSADM または DBADM 権限
- 連合データベースに対する IMPLICIT_SCHEMA 権限 (ニックネームの暗黙または明示のスキーマ名が存在しない場合)
- スキーマに対する CREATEIN 特権 (ニックネームのスキーマ名が存在する場合)
さらに、データ・ソースでのユーザーの許可 ID には、
ニックネームを作成する対象となる表または視点についてのメタデータを、
データ・ソース・カタログから選ぶための特権がなければなりません。
構文
>>-CREATE NICKNAME------nickname-----FOR--remote-object-name---><
説明
- nickname
- remote-object-name に示される表または視点のための、
連合サーバーの識別子を指定します。
暗黙または明示の修飾子を含むニックネームは、カタログに記述されている表、視点、別名、
またはニックネームを指定するものであってはなりません。
スキーマ名を、SYS で始めることはできません (SQLSTATE 42939)。
- remote-object-name
- 3 つの部分で構成される識別子を指定します。次のような形式になります。
data-source-name.remote-schema-name.remote-table-name
それぞれの意味は以下のとおりです。
- data-source-name
- ニックネームを作成する対象となる表または視点を含むデータ・ソースを指定します。
data-source-name は、
CREATE SERVER ステートメント内のデータ・ソースに割り当てられた名前と同じです。
- remote-schema-name
- 表または視点が属するスキーマを指定します。
- remote-table-name
- 以下のいずれかの識別子を指定します。
- DB2 ファミリーの表または視点の名前 (または別名)
- Oracle 表または視点の名前
- table-name を宣言済みの一時表にすることはできません (SQLSTATE 42995)。
注
- ニックネームで示されている表または視点は、
remote-object-name の最初の修飾子によって示されているデータ・ソースに存在していなければなりません。
- 連合サーバーでは、
LONG VARCHAR、
LONG VARGRAPHIC、
DATALINK、
ラージ・オブジェクト (LOB) タイプ、
およびユーザー定義のタイプなどの DB2 データ・タイプに対応する、
データ・ソースのデータ・タイプをサポートしていません。
データ・ソースの表または視点のためにニックネームを定義する場合、
連合データベースに対して定義し、そこから照会できる列は、
表または視点内にある、サポート済みのデータ・タイプの列だけです。
サポートされないデータ・タイプの列を持つ表または視点に対して、
CREATE NICKNAME ステートメントを実行すると、エラーが発生します。
- データ・タイプはデータ・ソース間で非互換なので、連合サーバー側は、
リモート・カタログ・データをローカルに保管するために、必要に応じて多少の調整を行います。
詳細については、アプリケーション開発の手引き を参照してください。
- DB2 索引名に許可されている最大長は 18 文字です。
この長さより長い名前の索引を持つ表にニックネームを作成する場合、
その名前の全体がカタログ化されることはありません。
DB2 側で 18 文字に切り捨てます。
そのような文字で構成されているストリングが、索引の属するスキーマ内で固有でない場合、
DB2 は最後の文字を 0 に置き換えて固有のストリングにしようとします。
その結果も固有でない場合は、DB2 は最後の文字を 1 に変えます。
それでも駄目であれば、DB2 はこのプロセスを 2〜9 までの数字を使って続けます。
必要であれば、名前の 17 番目の文字を 0〜9 まで、さらに 16 番目の文字を 0〜9 まで、
というように、固有の名前が生成されるまで繰り返してゆきます。
たとえば、データ・ソース表の索引を ABCDEFGHIJKLMNOPQRSTUVWXYZ とします。
この索引が属するスキーマ内に、
ABCDEFGHIJKLMNOPQR および ABCDEFGHIJKLMNOPQ0 という名前がすでに存在します。
新しい名前は 18 文字を超過してしまうため、
DB2 側で ABCDEFGHIJKLMNOPQR に切り捨てます。
この名前はすでにスキーマ内に存在しているため、
DB2 は切り捨てた名前を ABCDEFGHIJKLMNOPQ0 に変更します。
この名前も存在しているため、DB2 は切り捨てた名前を ABCDEFGHIJKLMNOPQ1 に変えます。
スキーマ内にはこの名前は存在しないため、DB2 はこの名前を新しい名前として受け入れます。
- 表または視点にニックネームを作成すると、
DB2 は表または視点の列の名前をカタログに保管します。
この名前の長さが DB2 列名に許可されている最大長 (30 文字) を超える場合、
DB2 はこの名前を 30 文字に切り捨てます。
切り捨てられた名前が、表または視点にある他の列の名前と同じで固有でない場合、
DB2 は前の段落で説明されている手順に従い、名前を固有のものに変更します。
例
例 1: HEDGES というスキーマにある、
DEPARTMENT という視点のニックネームを作成します。
この視点は、OS390A という DB2 ユニバーサル・データベース (OS/390 版) のデータ・ソースに保管されます。
CREATE NICKNAME DEPT FOR OS390A.HEDGES.DEPARTMENT
例 2: 例 1 でニックネームを作成したときの視点から、
すべてのレコードを選択します。この視点は、ニックネームで参照する必要があります。
(パススルー・セッションに限り、本来の名前で参照できます。)
SELECT * FROM OS390A.HEDGES.DEPARTMENT
| 無効
|
SELECT * FROM DEPT
| ニックネーム DEPT の作成後に有効
|
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]