RENAME ステートメント

RENAME ステートメントは、既存の表または索引の名前を変更します。

呼び出し

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

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • 表または索引に対する CONTROL 特権
  • 表の場合は SYSCAT.TABLES カタログ・ビュー、索引の場合は SYSCAT.INDEXES カタログ・ビューの OWNER 列に記録されている表または索引の所有権
  • スキーマに対する ALTERIN 特権
  • スキーマに対する SCHEMAADM 権限
  • DBADM 権限

構文

Read syntax diagramSkip visual syntax diagramRENAME TABLEsource-table-nameINDEXsource-index-name TOtarget-identifier

説明

TABLE ソース・テーブル名
名前を変更する既存の表を指定します。 名前 (スキーマ名を含む) は、 データベースに既に存在する表を指定していなければなりません (SQLSTATE 42704)。 この名前に、カタログ表 (SQLSTATE 42832)、マテリアライズ照会表、型付き表 (SQLSTATE 42997)、作成済み一時表、宣言されたグローバル一時表 (SQLSTATE 42995)、ニックネーム、または表や別名以外のオブジェクト (SQLSTATE 42809) を指定することはできません。 TABLE キーワードはオプションです。

この名前は、行権限定義または列マスク定義で参照される表を指定するものであってはなりません (SQLSTATE 42917)。

索引 source-index-name
名前を変更する既存の索引を指定します。 名前 (スキーマ名を含む) は、 データベースに既に存在する索引を指定していなければなりません (SQLSTATE 42704)。 作成済み一時表または宣言されたグローバル一時表上の索引の名前は指定できません (SQLSTATE 42995)。 スキーマ名は SYSIBM、SYSCAT、SYSFUN、 または SYSSTAT であってはなりません (SQLSTATE 42832)。
ターゲット ID
表または索引の新しい名前をスキーマ名を付けずに指定します。 ソース・オブジェクトのスキーマ名が、オブジェクトの新しい名前の修飾に使用されます。 修飾された名前が、データベースに既に存在する表、ビュー、 別名、または索引を指定するものであってはなりません (SQLSTATE 42710)。

ルール

表の名前を変更する場合、ソース表は以下に該当していてはなりません。

  • 既存のマテリアライズ照会表定義で参照されている
  • 既存の統計ビュー定義で参照されている。 これには、式ベースのキーを含む索引作成の一部として作成される、システム生成の統計ビューが含まれます。
    注: Db2 11.5.7のリリースでは、式に修飾名が含まれていない場合、式ベースのキーを持つ索引を使用した表の名前変更が可能です。
  • 既存のトリガーのサブジェクト表である
  • 参照整合性制約における親表または従属表である
  • 既存の参照列の有効範囲内である
  • Spatial Extender への空間登録で参照されている。 空間列を登録抹消してから、名前変更の完了後に再登録してください。
  • 分解が可能になっている XSR オブジェクトによって参照されている

ソース表が上記の条件の 1 つまたは複数に違反している場合、 エラー (SQLSTATE 42986) が戻されます。

索引の名前を変更する場合:
  • 型付き表の基になっているインプリメンテーション表のシステム生成索引を、ソース索引にすることはできません (SQLSTATE 42858)。

  • 3 部構成の名前を持つ CHECK 制約はサポートされていないので、SQL0750 が返されます。 代わりに、列名だけ使用してください。
  • カタログ項目が更新され、新しい表名または索引名が反映されます。
  • ソース表名または索引名に関連するすべての 許可は、 新しい表名または索引名に転送 されます (許可カタログ表が適切に更新されます)。
  • ソース表に対して定義された索引は、 新しい表に転送 されます (索引カタログ表が適切に更新されます)。
  • RENAME TABLE を行うと、ソース表に従属するパッケージはいずれも無効になります。 RENAME INDEX を行うと、ソース索引に従属するパッケージはいずれも無効になります。
  • source-table-name として別名を使用する場合、 その別名は表名に解決されなければなりません。 別名は RENAME ステートメントによって変更されず、従来の表名を引き続き指します。 この表は、オリジナル・スキーマ内で名前変更されます。
  • 主キー制約またはユニーク制約のある表の名前は、 主キーまたはユニーク制約がいずれも外部キーによって参照されていない場合に変更できます。

  • 例 1: EMP 表の名前を EMPLOYEE に変更します。
       RENAME TABLE EMP TO EMPLOYEE
       RENAME TABLE ABC.EMP TO EMPLOYEE
  • 例 2: 索引 NEW-IND の名前を IND に変更します。
       RENAME INDEX NEW-IND TO IND
       RENAME INDEX ABC.NEW-IND TO IND