4. Disparadores Automáticos (Triggers) 🔫
Eventos Fantasma
Muchas veces quieres que algo pase automáticamente en la base de datos sin que la aplicación (Node, Python) tenga que dar la orden.
Un Trigger es un bloque de código PL/SQL que "escucha" y se dispara solo cuando alguien intenta hacer un INSERT, un UPDATE o un DELETE en una tabla específica.
¿Para qué sirven? Casos de uso
- Auditoría: (El uso más común) Guardar un historial de todos los salarios modificados y quién los modificó.
- Reglas de negocio estrictas: Impedir que alguien actualice un pedido a "Cancelado" si ya está "Enviado".
- Campos calculados automáticos: Cada vez que se añade un producto (insert), restar 1 del stock.
Sintaxis y Magia: OLD y NEW
La gran magia de los triggers es que tienen acceso a dos registros fantasma: :NEW (cómo quedará el dato después del cambio) y :OLD (cómo estaba el dato antes del cambio).
🎮 Previniendo Horrores
Si quisieras usar un Trigger para impedir (abortar) que alguien borre a un "Gerente", ¿deberías usar un trigger tipo BEFORE DELETE o AFTER DELETE?
👁️ Ver respuesta sugerida
Debería ser BEFORE DELETE. De esa forma, evaluamos el cargo del empleado antes de que el motor lo borre, y si es 'Gerente', lanzamos un error y frenamos la operación.