SQL Daten und Child Record in einem löschen?

.point

Lieutenant
Registriert
Mai 2006
Beiträge
862
Hallo,

ich habe hier eine Oracle 11g Datenbank und muss einige Tabelleneinträge löschen.

Delete from DEV.SDK ...

Leider funktioniert das nicht, da untergeordnete Datensätze gefunden wurden.

ORA-02292: violated integrity constraint (owner.constraintname)- child record found

Gibt es eine Möglichkeit die Daten und alle Child Records mit zu löschen? Falls ja, wie heißt da der Befehl?
 
Hi,

ist denn für die Child Records kein Foreign Key Contraint "ON DELETE CASCADE" eingerichtet?

Im Grunde musst du dann einen Bottom Up Ansatz wählken - sprich die Child Elemente zuerst löschen. Ich würde das ggf. über eine Prozedur machen. Geht sicher auch mit einem DELETE Statement alleine.

Und natürlich: Daten vorher einmal sichern wenn möglich!

VG,
Mad
 
Möglichkeit 1, falls im Server vorgesehen: du erzeugst entsprechende Regeln für den Foreign Key. Für MySQL wäre das z.B. "ON DELETE CASCADE"
Möglichkeit 2, die immer geht: Entsorge alle Kinder manuell, dann entsorge das Elternelement
 
Daaron schrieb:
Möglichkeit 1, falls im Server vorgesehen: du erzeugst entsprechende Regeln für den Foreign Key. Für MySQL wäre das z.B. "ON DELETE CASCADE"
Möglichkeit 2, die immer geht: Entsorge alle Kinder manuell, dann entsorge das Elternelement

Möglichkeit 2 habe ich angefangen. Doch jetzt bin ich schon auf einer Ebene 7 oder 8 und das nimmt kein Ende.
 
Grundsätzlich müsstest du dir erstmal ein Überblick verschaffen. Die RIs haben vielleicht irgendein Sinn.

Falls die Childs 1. Ordnung den FK non-unique haben, könnte man einen Dummyrecord als Parent einsetzen. Aber ob das gewollt oder nahe am Pfusch ist können wir von hier aus nur schwer beurteilen.
 
Eben. Es kommt auch immer auf die Datenstruktur an.

Beispiel: User in einem Shop.
Wenn sich der User vom Shop abmeldet und eine Löschung seiner persönlichen Daten fordert, dann schmeißt du ihn natürlich aus der User-Table und du löschst seinen aktuellen Warenkorb gleich mit. Andererseits wirst du nicht seine Bestell-Historie löschen, denn die brauchst du für deine Abrechnung. Du "vererbst" die Bestellungen an einen Dummy-User, der für solche Orphans zuständig ist.
 
Zurück
Oben