12

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

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

4

2 に答える 2

28

動的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句でリストを指定する必要があります。

于 2010-09-13T15:04:27.237 に答える
0

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

于 2010-09-13T14:15:43.090 に答える