Frage

Ich mache einige Massenmigration von einer großen Oracle-Datenbank. Der erste Schritt dieses beinhaltet sie später zum Abwerfen eine ganze Menge von Tabellen als Vorbereitung Umbenennung (aber ich brauche die Daten in ihnen um jetzt zu halten). Jegliche Fremdschlüssel-Constraints auf sie müssen fallen gelassen werden - sie sollten nicht auf den Rest der Datenbank überhaupt angeschlossen werden. Wenn ich sie jetzt fallen konnte ich CONSTRAINTS CASCADE, sondern einfach verändert die Einschränkungen umbenennen.

Gibt es eine Weise, die ich alle Beschränkungen fallen kann, dass CASCADE CONSTRAINTS ohne Fallenlassen der Tabelle fallen würde selbst?

War es hilfreich?

Lösung

Sie können es mit dynamischen SQL tun und das Datenwörterbuch:

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;

Wenn die Tabellen von mehr als einem Benutzer gehören, werden Sie von DBA_CONSTRAINTS und umfassen BESITZER in der Projektion und der ausgeführten Anweisung fahren müssen. Wenn Sie alle weniger als die Tabellen berühren möchte ich fürchte, Sie werden die Liste in der WHERE-Klausel angeben müssen, es sei denn, es einige Muster, um ihre Namen ist.

Andere Tipps

können Sie deaktivieren / wieder aktivieren Zwänge, ohne sie fallen zu lassen. Schauen Sie sich auf diesem Artikel .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top