# SQL-Frage (Löschen aller Datensätze)



## Evolver (3. Aug 2007)

Ich möchte alle Datensätze löschen (die Tabellen sollen erhalten bleiben). Also wollte ich einfach für jede Tabelle DELETE FROM <tabelle>; ausführen. Die DB ist leider voll mit Constraints, weswegen ich beim Löschen diese Fehlermeldug erhalte:
ORA-02292: Integritäts-Constraint verletzt - untergeordneter Datensatz gefunden

Kann ich irgendwie festlegen, dass die Constraints ignoriert werden oder dass die entsprechenden untergeorneten Datensätze automatisch mit gelöscht werden? Oder wie muss ich es anstellen?
Ich habe schon gegooglt, aber nur Sachen bzgl. DROP TABLE gefunden, aber das möchte ich ja nicht.


----------



## tuxedo (3. Aug 2007)

Wenn du die Constraints ignorierst, gefährdest du die Konsistenz zwischen den Tabellen. 

Was für Constraints sind denn das genau?

- Alex


----------



## kama (3. Aug 2007)

Hallo,

ganz einfach in der richtigen Reihenfolge die Inhalte der Tabellen löschen....

MfG
Karl Heinz Marbaise


----------



## tuxedo (3. Aug 2007)

Oder so


----------



## Yzebär (3. Aug 2007)

Du kannst ein Script schreiben, daß zu jedem Datensatz deiner Ausgangstabelle ermittelt, ob es abhängige Daten gibt, die zuerst gelöscht werden müssen.


----------



## Evolver (3. Aug 2007)

> Wenn du die Constraints ignorierst, gefährdest du die Konsistenz zwischen den Tabellen.


 Das ist mir bewusst, aber egal, da ich die ganze DB leer haben will (nur die Tabellendefinitionen sollen erhalten bleiben).


Und man stelle sich vor, auf die Idee ein eigenes Script zu bauen bin ich auch selbst gekommen. Aber meine Frage ist ja, ob sich das vermeiden lässt, z.B. falls es eine Möglichkeit gäbe, die Constraints zu ignorieren. Scheinbar gibt es die aber nicht.


----------



## abollm (3. Aug 2007)

Evolver hat gesagt.:
			
		

> Ich möchte alle Datensätze löschen (die Tabellen sollen erhalten bleiben). Also wollte ich einfach für jede Tabelle DELETE FROM <tabelle>; ausführen. Die DB ist leider voll mit Constraints, weswegen ich beim Löschen diese Fehlermeldug erhalte:
> ORA-02292: Integritäts-Constraint verletzt - untergeordneter Datensatz gefunden
> 
> Kann ich irgendwie festlegen, dass die Constraints ignoriert werden oder dass die entsprechenden untergeorneten Datensätze automatisch mit gelöscht werden? Oder wie muss ich es anstellen?
> Ich habe schon gegooglt, aber nur Sachen bzgl. DROP TABLE gefunden, aber das möchte ich ja nicht.



Du kannst die Constrainits alle aus disabled setzen, bevor du ein DELETE oder besser TRUNCATE auf die Tabellen absetzt.

Das erscheint mir bei einer Vielzahl von Tabellen und damit einer noch größeren Vielzahl von Constraints aber komplex zu werden.

Besser du schreibst dir eine SP für so etwas.

Wenn du ein Muster brauchst, einfach melden.

Hth


----------



## HoaX (4. Aug 2007)

ich würde direkt den umgekehrten weg gehen. datenbank droppen und die datenbank+tabellen neu erstellen


----------



## abollm (4. Aug 2007)

@HoaX:

<Korinthen_Kack_Modus>
Du meinst sicher DB-Schema droppen.
Wenn du die Datenbank droppst, dann ist das Data Dictionary futsch und nichts geht mehr.
</Korinthen_Kack_Modus>


----------



## Evolver (4. Aug 2007)

Da ich ein Programm zum 'Droppen' aller Tabellen und zum Erstellen aller Tabellen habe, mache ich es jetzt auch so (löschen, dann neu erstellen). Das scheint mir noch am effizientesten zu sein, wenn es auch nicht wirklich schön ist.


----------

