web-dev-qa-db-ja.com

Oracle-テーブルを削除せずにテーブル制約を削除する

大規模なOracleデータベースの一括移行を行っています。この最初のステップでは、後でドロップする準備として、テーブルのロード全体の名前を変更します(ただし、今のところ、テーブル内のデータを保持する必要があります)。それらに対する外部キー制約はすべて削除する必要があります。データベースの残りの部分に接続しないでください。今それらを削除する場合、CASCADE CONSTRAINTSを実行できますが、名前を変更すると制約が変更されるだけです。

テーブル自体を削除せずに、CASCADE CONSTRAINTSが削除するすべての制約を削除する方法はありますか?

11
Submonoid

動的SQLとデータディクショナリを使用してこれを行うことができます。

begin
    for r in ( select table_name, constraint_name
               from user_constraints
               where constraint_type = 'R' )
    loop
        execute immediate 'alter table '|| r.table_name
                          ||' drop constraint '|| r.constraint_name;
    end loop;
end;

テーブルが複数のユーザーによって所有されている場合は、DBA_CONSTRAINTSから駆動し、プロジェクションと実行されるステートメントにOWNERを含める必要があります。すべてのテーブルよりも少ない数のテーブルに触れたい場合は、名前に何らかのパターンがない限り、WHERE句でリストを指定する必要があります。

23
APC

制約を削除せずに無効化/再有効化できます。 この記事 を見てください。