web-dev-qa-db-fra.com

Comment forcer Oracle à supprimer en cascade sans supprimer/recréer des contraintes

J'ai une table parent, qui contient une table enfant dosen la référençant ..__ Ces tables enfant ont à leur tour d'autres tables enfants qui les référencent Etc.

Je dois supprimer une ligne de la table parent principale en la mettant en cascade.

Supprimer/recréer des contraintes partout pour les avoir "ON CASCADE DELETE" n'est pas une option

Les parcourir toutes et supprimer des rangées enfants manuellement est un cauchemar.

Toutes les autres options?

19
user1773602

L'instruction DELETE n'a pas de paramètre pour la mettre en cascade.

Ainsi, vous pouvez soit créer l'utilisateur de ON CASCADE DELETE, soit simplement exécuter un groupe de suppressions séparées dans le bon ordre. 

Vous pourriez écrire une procédure de «suppression intelligente» qui examine la structure de la table et génère une série de bases de suppressions sur cette base, mais cela nécessitera probablement plus de travail et plus de cauchemar que d'écrire les suppressions séparées. Et vous auriez besoin de ces contraintes pour que cela fonctionne, ce qui en réalité n’est pas toujours souhaité.

27
GolezTrol

J'ai résolu ce type de problème dans Oracle avec une application que j'avais créée exprès pour fusionner des données d'une branche à une autre - cible, puis supprimer la source.

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

citant 

Étant donné cette erreur, par exemple: client Pedrus Root (représentation de clé interne # R = 111) est identique à Petrus Root (# R = 222) . Déplacez les données sous 222 vers 111, puis supprimez la branche 222.
KTC rassemble toutes les données relatives à ce cas (et aux quelques cas à résoudre), de manière intelligente, à partir de toutes les tables de base de données pertinentes.
L'algorithme effectue une recherche uniquement si nécessaire et en utilisant tous les composants clés disponibles.
Une sauvegarde de toutes les données est maintenue localement à des fins d'audit. Le référentiel local évolue de manière transparente pour prendre en compte les modifications apportées aux définitions de table/champ. 

L'utilisateur expérimenté inspecte visuellement l'arbre de table/relation et peut afficher/imprimer/modifier des données dans n'importe quelle table et éventuellement modifier l'action présumée (couper, couper/coller ou terminé).
Enfin, KTC génère des centaines de lignes d'insertions, de mises à jour et de suppressions de code correctif pour résoudre ce cas particulier, répertoriées dans un ordre approprié se terminant par
supprimer de rootTable où # R = 222.
Ensuite, j'applique le code avec les utilisateurs en ligne. 

Dans votre cas, un filtre devra supprimer toutes les lignes sauf celles supprimées.

Autant que je sache, il n'y a pas d'application équivalente sur le marché. 

0
Helder Velez