Preguntado hace 1 año
Gabriel Molina
Hola, en la aplicación actual la tabla de usuarios no permitimos que se borre para mantener la integridad de datos, hacemos un borrado "lógico" pero no real. Tenemos un campo borrado de tipo bit. Si es igual a 1 está borrado.
Nos piden que se pueda hacer en ciertos casos, sólo los administradores, un borrado real. Es decir que los usuarios normales hagan el borrado como lo hacemos ahora, pero que los administradores puedan borrar de verdad.
Se me ocurre que hagamos un procedimiento almacenado para esto y que vaya borrando en el orden jerárquico todo lo relacionado con el usuario y luego borre el usuario, aunque me parece una solución bastante tediosa. ¿Sería posible-recomendable establecer una especie de delete cascade antes de borrar la fila y luego dejarlo como antes? ¿Otras soluciones?
Hace 1 año
Rafa
Yo la solución más fácil que le veo a lo que te he entendido, es modificar las tablas para ponerles la cláusula on delete cascade a las tablas relacionadas con las de usuarios. Posteriormente en el código fuente discriminar qué tipo de usuario realiza el borrado, si es un usuario normal se hace un update para marcar el borrado "logico" y si es un administrador, se hace el delete real y le dejamos a oracle el borrado con delete cascade, que mejor que oracle nadie va a controlar la integridad de las entidades relacionadas :)
Si no puedes alterar las definiciones de las tabla entonces sí, yo haría un procedimiento, ya sea en pl/sql en oracle o en el programa. Y según qué usuario o realizo el borrado lógico, o invoco el delete real. Yo lo haría en pl/SQL para que te sirva de forma independiente del lenguaje de programación de la aplicación.
Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?
Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.
Trata de ser descriptivo, usa al menos 25 caracteres
LLeva tu prestigio a tu página o blog, con el widget de Babelias
Usuario de ejemplo