Oracleでテーブルの名前を変更する必要がありますが、テーブルを参照するすべての外部キー、制約、トリガー、およびシーケンスが新しい名前を使用するように更新されていることを確認します。
何も壊れていないことをどのように確認できますか?
テーブルに含まれている既存のデータを保持したいことに注意してください。
これは、「テーブルを参照する外部キー、制約、トリガー、およびシーケンスは、新しい名前を使用するように更新される」という意味によって異なります。
名前を変更するテーブルに対する既存のインデックス、制約、およびトリガーは、自動的に新しい名前を参照します。
ただし、これらのオブジェクトに使用される命名規則では、更新された名前が自動的に使用されることはありません。たとえば、TABLE_NAME
の主キーの名前が一般にTABLE_NAME_PK
の場合、TABLE_NAME
の名前をNEW_TABLE_NAME
に変更しても、主キー制約の名前は自動的にNEW_TABLE_NAME_PK
に変更されません。
チェックする必要があるのは、古いテーブル名を参照するコード(パッケージ、プロシージャ、関数)と、古いテーブル名を参照するトリガーです。同様に、古いテーブル名に対するビューも壊れます。ビューALL_DEPENDENCIES
は、更新が必要なオブジェクトを特定するのに役立ちます。
もし、あんたが
ALTER TABLE old_table_name
RENAME TO new_table_name;
すべての既存の制約(外部キーおよびその他の制約)とトリガーは、新しく名前が変更されたオブジェクトを参照します。シーケンスはテーブルとの関係がないため、シーケンスへの影響はありません(ただし、テーブルのトリガーでシーケンスを参照している場合、トリガーは名前変更後も同じシーケンスを参照し続けます)。ただし、古いテーブル名を参照するように記述したストアドプロシージャは、新しいテーブル名を参照するように更新する必要があります。
これで、制約とトリガーは引き続き正しく機能しますが、元の名前は保持されます。テーブル名の後に維持したいこれらのオブジェクトの命名規則がある場合、さらに行う必要があります。たとえば、テーブルFOO
にトリガーを挿入する前の行レベルにTRG_BI_FOO
という名前を付け、テーブルの名前をBAR
に変更する場合は、トリガーを変更する必要があります。名前を明示的に変更する
ALTER TRIGGER trg_bi_foo
RENAME TO trg_bi_bar;
同様に、制約とインデックスの名前を変更する必要があります
ALTER TABLE bar
RENAME CONSTRAINT pk_foo TO pk_bar;
ALTER TABLE oldName RENAME TO newName
テーブルの依存関係とデータは保持されますが、無効になる古い名前を参照するPL/SQLが常に存在する可能性があります。