2012-12-14 9 views
18

Mam tabelę nadrzędną, która zawiera tabele potomków dosen, które go dotyczą. Te tabele potomne z kolei mają inne tabele potomne, które się do nich odwołują. I tak dalej.Jak zmusić oracle do usuwania kaskadowego bez upuszczania/odtwarzania ograniczeń

Potrzebuję usunąć wiersz z głównej tabeli nadrzędnej, kaskadując go do samego końca.

spada/odtworzenie ograniczeń w każdym miejscu, aby je „ON DELETE CASCADE” nie jest opcją

Przechodząc przez wszystkie z nich i usuwanie wierszy podrzędnych ręcznie to koszmar.

Jakieś inne opcje?

+0

są wyzwalaczami ważnej opcji dla ciebie? – danihp

+0

@danihp, nie, nie są.Nie mogę zmodyfikować schematu –

+0

Ile wierszy trzeba usunąć i czy będzie to zwykłe zadanie? –

Odpowiedz

24

Jest to albo wiązanie albo kilka oddzielnych usunięć.

Można napisać procedurę "inteligentnego usuwania", która bada strukturę tabeli i generuje serię baz usuwających, ale to prawdopodobnie będzie więcej pracy i więcej koszmaru niż pisanie oddzielnych usunięć. I masz mieć, aby mieć te elementy, aby to działało, co w rzeczywistości nie zawsze jest pożądane.

Instrukcja DELETE nie ma parametrów pozwalających na kaskadowanie.

+3

Tak, nie ma magii. – ntalbs

0

Rozwiązałem tego rodzaju problem w wyroczni za pomocą aplikacji, którą zrobiłem w celu scalenia danych z jednego oddziału do innego - celu, a następnie usunięcia źródła.

https://sites.google.com/site/keytreechanger/Home https://sites.google.com/site/keytreechanger/Home/screenshots

cytując

Biorąc pod uwagę ten błąd, na przykład: klient Pedrus głównej (wewnętrzny klucz reprezentacja # R = 111) jest taka sama jak Petrus root (# R = 222) . Przenieś dane poniżej 222 na 111, a następnie usuń 222 gałęzi.
KTC zbiera wszystkie dane dotyczące tej sprawy (i kilka kolejnych spraw do rozwiązania), w smarty sposób z wszystkich odpowiednich tabel bazy danych.
Algorytm wyszukuje tylko w razie potrzeby i używa wszystkich dostępnych kluczowych składników.
Kopia zapasowa wszystkich danych jest przechowywana lokalnie do celów audytu. Lokalne repozytorium ewoluuje w sposób przezroczysty, aby uwzględnić zmiany w definicjach tabeli/pola.

Użytkownik zaawansowany wizualnie sprawdza drzewo tabeli/relacji i może wyświetlać/drukować/edytować dane w dowolnej tabeli i opcjonalnie modyfikować podejrzane działanie (wycinanie, wycinanie i wklejanie lub wykonanie).
Wreszcie KTC generuje setki linii wstawek, aktualizacji i usunięć kodu korekcyjnego, aby rozwiązać ten konkretny przypadek, wymienione w odpowiedniej kolejności kończącej się
usunięcie z tabeli rootTable gdzie # R = 222.
Następnie stosuję kod z użytkownikami online.

W twojej sytuacji filtr będzie musiał usunąć wszystkie wiersze, ale usunąć je.

AFAIK nie ma podobnego zastosowania na rynku.

Powiązane problemy