sql >> データベース >  >> RDS >> Oracle

Oracleのすべてのテーブル制約を無効にする

    一時スプールファイルの書き込みは避けた方がよいでしょう。 PL/SQLブロックを使用します。これはSQL*Plusから実行することも、パッケージまたはプロシージャに入れることもできます。 USER_TABLESへの結合は、ビューの制約を回避するためにあります。

    すべての制約(NOT NULL、主キーなどを含む)を実際に無効にする必要はほとんどありません。 WHERE句にconstraint_typeを入れることを検討する必要があります。

    BEGIN
      FOR c IN
      (SELECT c.owner, c.table_name, c.constraint_name
       FROM user_constraints c, user_tables t
       WHERE c.table_name = t.table_name
       AND c.status = 'ENABLED'
       AND NOT (t.iot_type IS NOT NULL AND c.constraint_type = 'P')
       ORDER BY c.constraint_type DESC)
      LOOP
        dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
      END LOOP;
    END;
    /
    

    制約を再度有効にするのは少し注意が必要です。外部キー制約でそれらを参照する前に、主キー制約を有効にする必要があります。これは、constraint_typeでORDERBYを使用して実行できます。 'P' =主キー、'R'=外部キー。

    BEGIN
      FOR c IN
      (SELECT c.owner, c.table_name, c.constraint_name
       FROM user_constraints c, user_tables t
       WHERE c.table_name = t.table_name
       AND c.status = 'DISABLED'
       ORDER BY c.constraint_type)
      LOOP
        dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
      END LOOP;
    END;
    /
    


    1. SQL ServerReportingServicesの調整

    2. 「/u01」ファイルシステム上に多数のxmlファイルを生成するクラスター検証ユーティリティ。

    3. NULL値でNOTIN選択

    4. MSSQLServerでのデータベースメール通知の構成