2012-12-14 8 views
18

Ho una tabella genitore, che ha una tabella di riferimento figlio che la fa riferimento. Queste tabelle figlio a turno hanno altre tabelle figlio che fanno riferimento a esse. E così via.Come forzare oracle a fare la cancellazione in cascata senza ridurre/ricreare i vincoli

Ho bisogno di eliminare una riga dalla tabella padre principale a cascata fino in fondo.

Dropping/ricreare vincoli tutto il luogo di averli "ON DELETE CASCADE" non è un'opzione

Passando attraverso tutti loro ed eliminazione di righe figlio manualmente è un incubo.

Altre opzioni?

+0

attivano un'opzione valida per te? – danihp

+0

@danihp, no non lo sono.Non riesco a modificare lo schema –

+0

Quante righe devi eliminare e questa sarà un'attività normale? –

risposta

24

Sono i limiti o un gruppo di eliminazioni separate.

Si potrebbe scrivere una procedura di 'cancellazione intelligente' che indaga sulla struttura della tabella e genera una serie di basi di eliminazione su quello, ma che probabilmente sarà più lavoro e più un incubo che scrivere le eliminazioni separate. E tu avresti avere per far funzionare queste cose per questo, che in realtà non è sempre desiderato.

L'istruzione DELETE non ha parametri per renderla a cascata.

+3

Sì, non c'è magia. – ntalbs

0

Ho risolto questo tipo di problema in oracle con un'applicazione che ho fatto apposta per unire i dati da un ramo ad un altro - destinazione, e quindi eliminare quello di origine.

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

citando

Dato questo errore, ad esempio: client Pedrus Root (chiave rappresentazione # R interno = 111) è uguale Petrus Root (# R = 222) . Spostare i dati da 222 a 111 e quindi eliminare il ramo 222.
KTC raccoglie tutti i dati relativi a questo caso (e ai casi successivi da risolvere), in modo intelligente da tutte le tabelle di database pertinenti.
L'algoritmo cerca solo dove necessario e utilizza tutti i componenti chiave disponibili.
Un backup di tutti i dati viene gestito localmente per scopi di controllo. Il repository locale si evolve in modo trasparente per adattarsi alle modifiche nelle definizioni di tabelle/campi.

L'utente esperto ispeziona visivamente l'albero tabella/relazioni e può visualizzare/stampare/modificare dati in qualsiasi tabella e opzionalmente modificare l'azione presunta (taglia, taglia e incolla o fatto).
Infine KTC genera centinaia di righe di inserti, aggiornamenti e eliminazioni di codice correttivo per risolvere questo caso particolare, elencato in un ordine appropriato che termina con
delete da rootTable dove # R = 222.
Quindi, applico il codice con gli utenti online.

Nella tua situazione un filtro dovrà rimuovere tutte le linee ma quelle di cancellazione.

AFAIK non esiste un'applicazione equivalente sul mercato.

Problemi correlati