sql - transponer - Cómo forzar a Oracle a hacer una eliminación en cascada sin eliminar/recrear restricciones
pivot oracle columns to rows (2)
Tengo una tabla principal, que tiene dosen tablas secundarias que hacen referencia a ella. Esas tablas secundarias a su vez tienen otras tablas secundarias que hacen referencia a ellas. Y así.
Necesito eliminar una fila de la tabla principal principal en cascada hasta el fondo.
Eliminar / volver a crear restricciones en todo el lugar para tenerlas "ON CASCADE DELETE" no es una opción
Pasar por todos ellos y eliminar filas hijas manualmente es una pesadilla.
¿Alguna otra opción?
La instrucción DELETE no tiene parámetros para hacerla en cascada.
Por lo tanto, puede hacer usuario de ON CASCADE DELETE
o simplemente ejecutar un montón de eliminaciones separadas en el orden correcto.
Podría escribir un procedimiento de ''eliminación inteligente'' que investigue la estructura de la tabla y genere una serie de bases de eliminación en eso, pero eso probablemente será más trabajo y más una pesadilla que escribir las eliminaciones por separado. Y tendrías que tener esas restricciones para que esto funcione, lo que en realidad no siempre se desea.
Resolví este tipo de problema en Oracle con una aplicación que he hecho a propósito para fusionar datos de una rama a otra: objetivo, y luego eliminar la fuente original.
https://sites.google.com/site/keytreechanger/Home https://sites.google.com/site/keytreechanger/Home/screenshots
citando
Dado este error, por ejemplo: la raíz del cliente Pedrus (representación de clave interna # R = 111) es la misma que la raíz de Petrus (# R = 222). Mueva los datos debajo de 222 a 111 y luego elimine 222 ramas.
KTC recopila todos los datos relativos a este caso (y los siguientes casos por resolver), de una manera inteligente de todas las tablas relevantes de la base de datos.
El algoritmo solo busca donde sea necesario y utilizando todos los componentes clave disponibles.
Una copia de seguridad de todos los datos se mantiene localmente para fines de auditoría. El repositorio local evoluciona de forma transparente para adaptarse a los cambios en las definiciones de la tabla / campo.El usuario avanzado inspecciona visualmente la tabla / árbol de relaciones, y puede ver / imprimir / editar datos en cualquier tabla y, opcionalmente, modificar la acción presunta (cortar, cortar y pegar o hacer).
Finalmente, KTC genera cientos de líneas de inserciones, actualizaciones y eliminaciones de código correctivo para resolver este caso particular, enumeradas en un orden adecuado que termina con
eliminar de rootTable donde # R = 222.
Luego, aplico el código con los usuarios en línea.
En su situación, un filtro tendrá que eliminar todas las líneas excepto las eliminadas.
AFAIK no existe una aplicación equivalente en el mercado.