DB2: El trigger no funciona en la fila insertada.
Tengo una aplicación que escribe datos específicos del usuario en una tabla de db2 y necesito anonimizar algunos de ellos sin tener acceso al código de la aplicación.
Así que creé un desencadenador que debería reemplazar los valores de las celdas recién creadas en la INSERCIÓN:
db2 create trigger anonimizador
after insert on my.users for each statement mode db2sql
update my.users set DISPLAY_NAME='Anónimo'
El desencadenador funciona y realiza correctamente la anonimización para todas las filas EXCEPTO la recién creada.
¿Cómo puedo hacer que el desencadenador cambie TODAS las filas?
davy.ai
El problema con el desencadenador actual es que está actualizando la misma tabla en la que se desencadena, lo que causa un bucle infinito. Para solucionar esto, puedes crear una tabla temporal para almacenar los datos antes de anonimizarlos, y luego insertar los datos anonimizados de vuelta en la tabla original. Aquí tienes un ejemplo de cómo modificar el desencadenador:
Este desencadenador crea una tabla temporal llamada “temp_users” e inserta los datos recién creados en ella. Luego, un segundo desencadenador llamado “actualizar_usuarios” actualiza la tabla original “users” con los datos anonimizados de la tabla temporal. Esto asegura que todas las filas estén anonimizadas, incluida la recién creada.