CREATE NICKNAME ステートメント

CREATE NICKNAME ステートメントは、データ・ソース・オブジェクトのニックネームを定義します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • フェデレーテッド・データベースに対する CREATETAB 権限および以下のいずれかが必要です。
    • フェデレーテッド・データベースに対する IMPLICIT_SCHEMA 権限 (ニックネームの暗黙または明示のスキーマ名が存在しない場合)
    • スキーマに対する CREATEIN 特権 (ニックネームのスキーマ名が既存のスキーマを指している場合)
    • スキーマに対する SCHEMAADM 権限 (ニックネームのスキーマ名が既存のスキーマを指している場合)
  • DBADM 権限

ユーザー・マッピングが必要なデータ・ソースの場合、データ・ソースで許可 ID が保持する特権に、 ニックネームが表すオブジェクトからデータを選択する特権が組み込まれている必要があります。

既存のニックネームを置換するには、ステートメントの許可 ID が既存のニックネームの所有者でなければなりません (SQLSTATE 42501)。

構文

構文図を読む構文図をスキップするCREATEOR REPLACE NICKNAMEnicknameFORremote-object-nameOPTIONS(,nickname-option-namestring-constant)

説明

OR REPLACE
ニックネームの定義が現行のサーバー上に存在している場合に、そのニックネームの定義を置換するために指定します。 既存の定義は、新しい定義がカタログ内で置換される前に効率的にドロップされます。ただし、ニックネームに対して付与された特権は影響を受けないという例外があります。 このオプションは、ニックネームの定義が現行のサーバー上に存在しない場合は無視されます。 このオプションは、オブジェクトの所有者しか指定できません。
nickname
ニックネーム、つまりデータ・ソース・オブジェクト用に フェデレーテッド・サーバーが使用する ID を指定します。 暗黙または明示の修飾子を含むニックネームは、カタログに記述されている表、ビュー、 ニックネーム、または別名を指定するものであってはなりません。 スキーマ名を、SYS で始めることはできません (SQLSTATE 42939)。
FOR remote-object-name
ID を指定します。 スキーマ名をサポートするデータ・ソースの場合、 これは data-source-name.remote-schema-name.remote-table-name という形式の 3 つの部分からなる ID です。 スキーマ名をサポートしないデータ・ソースの場合は、 これは data-source-name.remote-table-name という形式の 2 つの部分からなる ID です。
data-source-name
ニックネームを作成する対象となる表またはビューを含むデータ・ソースを指定します。 data-source-name は、 CREATE SERVER ステートメント内の server-name に割り当てられた名前と同じです。
remote-schema-name
表またはビューが属するスキーマを指定します。 リモート・スキーマ名に特殊文字や小文字が含まれる場合には、二重引用符で囲まなければなりません。
remote-table-name
ニックネームを作成している、特定のデータ・ソース・オブジェクト (表、表の別名、ビューなど) の名前。 表を宣言済み一時表 (SQLSTATE 42995) にすることはできません。 リモート表名に特殊文字や小文字が含まれる場合には、二重引用符で囲まなければなりません。
OPTIONS
作成するニックネームの構成オプションを指定します。 指定可能なオプションは、ニックネームの作成対象オブジェクトのデータ・ソースによって異なります。 データ・ソースとそれぞれに当てはまるニックネーム・オプションのリストについては、データ・ソース・オプションを参照してください。 各オプション値は文字ストリング定数で、単一引用符で囲む必要があります。

  • リレーショナル・データ・ソース・オブジェクトの例は、表とビューです。 非リレーショナル・データ・ソース・オブジェクトの例は、Documentum オブジェクトまたは登録済み表、テキスト・ファイル (.txt)、および Microsoft Excel ファイル (.xls) です。
  • ニックネームで示されているデータ・ソース・オブジェクトは、 remote-object-name の最初の修飾子によって示されている データ・ソースに存在していなければなりません。
  • サポートされるデータ・ソース・データ・タイプのリストは、ラッパーごとに異なります。 XML および REF データ・ソースのデータ・タイプは、どのラッパーによってもサポートされていません。 CREATE NICKNAME ステートメントに、 サポートされないデータ・タイプの列を持つ remote-object-name を指定すると、 エラーが戻されます。

    LONG VARCHAR および LONG VARGRAPHIC データ・ソースのデータ・タイプは、 CLOB および DBCLOB データ・タイプにそれぞれマップされます。 LONG VARCHAR FOR BIT DATA は BLOB にマップされます。

  • 索引名の最大許容長は 128 バイトです。 索引の名前がこれより長いリレーショナル表にニックネームを作成する場合、 その名前の全体のカタログが作成されることはありません。 その代わり、128 バイトに切り捨てられます。 これらの文字で構成されているストリングが、索引の属するスキーマ内で固有でない場合、末尾の文字を 0 に置き換えて固有のストリングにするよう試みられます。 その結果も固有でない場合は、末尾の文字が 1 に変更されます。 このプロセスが、2 から 9 までの数字を使用して繰り返されます。さらに必要であれば、名前の 127 番目の文字、126 番目の文字という順序で 0 から 9 までの数字を使用して同様に繰り返され、固有の名前が生成されるまで続けられます。 例えば、データ・ソース表の索引の 130 バイトの名前を AREALLY...REALLYLONGNAME とします。この索引が属するスキーマ内に、AREALLY...REALLYLONGNA および AREALLY...REALLYLONGN0 という名前が既に存在します。この新しい名前は 128 バイトを超過してしまうため、AREALLY...REALLYLONGNA となるように切り捨てが行われます。 この名前は既にスキーマ内に存在するため、切り捨て後の名前が AREALLY...REALLYLONGN0 に変更されます。 この名前も存在するため、切り捨て後の名前は AREALLY...REALLYLONGN1 に変更されます。 この名前はスキーマ内にまだないため、新しい名前として受け入れられます。
  • データ・ソース・オブジェクトにニックネームを作成すると、ニックネーム列の名前はカタログに保管されます。 データ・ソース・オブジェクトが表またはビューの場合には、その表またはビューの列名と同じになるようにニックネーム列名が作成されます。 名前が、データベース列名の最大許容長を超える場合、その長さに名前が切り捨てられます。 切り捨て後の名前が、表またはビューにある他の列の名前に照らして固有でない場合、前の段落で説明されている手順に従って、固有の名前に変更されます。
  • データ・ソース・オブジェクトに索引が定義されている場合、ニックネームが作成されるときに索引ごとの SPECIFICATION ONLY 指定の索引が作成されます。 次のような索引に対しては、データ・ソースに SPECIFICATION ONLY 指定の索引が作成されません。
    • 列名が重複している
    • 列の数が 64 より多い
    • 索引キー部分の長さが合計 1024 バイトを超える
  • リモート・データ・ソース・オブジェクトの定義が変更される場合 (例えば、 列の削除やデータ・タイプの変更)、ニックネームをドロップしてから再作成しなければなりません。 そうしないと、ニックネームを SQL ステートメント内で使用するときに、 エラーが戻される場合があります。
  • キャッシング・オブジェクトおよび保護オブジェクト: ニックネームが作成されるときにデータ・ソース・オブジェクトが保護されていない場合、ALLOW CACHING がニックネームに対して有効になります。 フェデレーテッド・サーバーがデータ・ソース・オブジェクトが保護されていることを検出できる場合、DISALLOW CACHING がニックネームに対して有効になります。 DISALLOW CACHING オプションにより、ニックネームが使用されるたび、照会の実行時に適切な許可 ID のデータがデータ・ソースから戻されるようになります。 これは、フェデレーテッド・サーバーのマテリアライズ照会表の定義でのニックネームの使用を制限することによって行えます。ニックネーム・データをキャッシュに入れるためにそれが使用されている可能性があります。 ALLOW CACHINGDISALLOW CACHING の間の変更は、ALTER NICKNAME ステートメントを使用して行えます。
  • フェデレーテッド・システムでは、BINARY と VARBINARY のタイプはサポートされていません。
  • リモート・データ・ソースが Hive、Spark、または Impala の場合、およびリモート・データ・ソース・オブジェクトに STRING や VARCHAR(65535) などの大きな値の文字タイプの列が含まれている場合、リモート列は VARCHAR(32672) タイプのローカル列にマップされ、32672 バイトを上回るデータは切り捨てられます。

  1. 例 1 でニックネームを作成したときのビューから、すべてのレコードを選択します。 ビューのニックネームによってビューを参照する必要があります。リモート・ビューは、パススルー・セッション時に限って データ・ソースで認識されるときの名前を使用して参照できます。
    ニックネーム DEPT が作成された後、以下のステートメントは有効です。
    
       SELECT * FROM DEPT
    以下のステートメントは無効です。
       SELECT * FROM OS390A.HEDGES.DEPARTMENT
  2. salesdata という名前のスキーマにあるリモート表 JAPAN のニックネームを作成します。データ・ソース上のスキーマ名と表名は小文字で保管されるため、 リモート・スキーマ名と表名には二重引用符を付けて指定します。
       CREATE NICKNAME JPSALES
         FOR asia."salesdata"."japan"
  3. 表構造のファイル DRUGDATA1.TXT のニックネームを作成します。 ステートメントに FILE_PATH、COLUMN DELIMITER、KEY_COLUMN、および VALIDATE_DATA_FILE ニックネーム・オプションを組み込みます。
       CREATE NICKNAME DRUGDATA1
         (Dcode         INTEGER,
         DRUG           CHAR(20),
         MANUFACTURER   CHAR(20))
         FOR SERVER biochem_lab
         OPTIONS
           (FILE_PATH '/usr/pat/DRUGDATA1.TXT',
            COLUMN_DELIMITER ',',
            KEY_COLUMN 'DCODE',
            SORTED 'Y',
            VALIDATE_DATA_FILE 'Y')
  4. 指定したディレクトリー・パス /home/dbuser にある複数の XML ファイルに対して親ニックネーム CUSTOMERS を作成します。 以下のオプションを組み込みます。
    • 列オプション:
      • ID という名前の VARCHAR(5) 列に XPATH 列オプションを指定し、 列データを抽出する XML ファイルのエレメントまたは属性を指示します。
      • NAME という名前の VARCHAR(16) 列に XPATH 列オプションを指定し、 列データを抽出する XML ファイルのエレメントまたは属性を指示します。
      • ADDRESS という名前の VARCHAR(30) 列に XPATH 列オプションを指定し、 列データを抽出する XML ファイルのエレメントまたは属性を指示します。
      • CID という名前の VARCHAR(16) 列に PRIMARY_KEY 列オプションを指定し、 ニックネームの階層で親ニックネームとなるカスタマー・ニックネームを指示します。
    • ニックネーム・オプション:
      • DIRECTORY_PATH ニックネーム・オプションは、データを提供する XML ファイルの場所を指示します。
      • XPATH ニックネーム・オプションは、XML ファイル内でデータが始まるエレメントを指示します。
      • STREAMING ニックネーム・オプションは、XML ソース・データがエレメントで区切られており、 エレメントごとに処理されることを指示します。この例では、エレメントはカスタマー・レコードです。
       CREATE NICKNAME customers
         (id      VARCHAR(5)   OPTIONS(XPATH './@id'),
          name    VARCHAR(16)  OPTIONS(XPATH './/name'),
          address VARCHAR(30)  OPTIONS(XPATH './/address/@street'),
          cid     VARCHAR(16)  OPTIONS(PRIMARY_KEY 'YES'))
          FOR SERVER xml_server
          OPTIONS
            (DIRECTORY_PATH '/home/dbuser',
             XPATH '//customer',
             STREAMING 'YES')
  5. STR_TAB という名前の Hive 表には、COL5 という名前の列が含まれています。COL5 のタイプは STRING で、列の長さは 2 GB です。STR_TAB のニックネームを作成すると、COL5 の列の長さは 32672 バイトに削減されます。
       CREATE NICKNAME "STRING_NCK" FOR "SERVER10"."STR_TAB"
       SQL1812W  Remote column COL5 with length 2147483647 was reduced to 32672. SQLSTATE=0169E