14

Oracle でテーブルの名前を変更する必要がありますが、テーブルを参照する外部キー、制約、トリガー、およびシーケンスが新しい名前を使用するように更新されていることを確認したいと考えています。

何も壊していないことをどのように確認できますか?

テーブルに含まれる既存のデータを保持したいことに注意してください。

4

3 に答える 3

23

もし、あんたが

ALTER TABLE old_table_name
 RENAME TO new_table_name;

すべての既存の制約 (外部キーおよびその他の制約) とトリガーは、新しく名前が変更されたオブジェクトを参照します。シーケンスはテーブルとの関係がないため、シーケンスに影響はありません (ただし、テーブルのトリガーでシーケンスを参照している場合、トリガーは名前変更後も同じシーケンスを参照し続けます)。ただし、古いテーブル名を参照するストアド プロシージャは、新しいテーブル名を参照するように更新する必要があります。

現在、制約とトリガーは引き続き正しく機能しますが、元の名前は保持されます。テーブル名の後に維持したいこれらのオブジェクトの命名規則がある場合は、さらに多くのことを行う必要があります。たとえば、テーブルの行レベル before insert トリガーに名前を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;
于 2012-02-14T15:38:26.983 に答える
13

それは、「テーブルを参照する外部キー、制約、トリガー、およびシーケンスが新しい名前を使用するように更新される」という意味によって異なります。

名前を変更するテーブルに対する既存のインデックス、制約、およびトリガーは、新しい名前を自動的に参照します。

ただし、これらのオブジェクトに使用される命名規則では、更新された名前が自動的に使用されるわけではありません。たとえば、 の主キーのTABLE_NAME名前が一般に である場合、 に名前を変更しても、主キー制約の名前が に自動的に変更TABLE_NAME_PKTABLE_NAMEれるわけではありません。NEW_TABLE_NAMENEW_TABLE_NAME_PK

チェックする必要があるのは、古いテーブル名を参照したコード (パッケージ、プロシージャ、および関数) と、古いテーブル名を参照したトリガーです。同様に、古いテーブル名に対するビューも壊れます。このビューALL_DEPENDENCIESは、更新が必要なオブジェクトを特定するのに役立ちます。

于 2012-02-14T15:38:00.600 に答える
1
ALTER TABLE oldName RENAME TO newName

テーブルの依存関係とデータは保持されますが、無効になる古い名前を参照するPL/SQLが常に存在する可能性があります。

于 2012-02-14T15:42:40.183 に答える