Mi primer trigger de MySQL
Estoy trabajando en la parte de facturación de una plataforma de voz sobre IP y me estaba volviendo loco intentando facturar en tiempo real las llamadas que tienen coste. Hacerlo desde Asterisk, el componente donde se realiza la facturación, no me resultaba sencillo ya que los datos de facturación de la llamada se escriben en la base de datos después de que el AGI (el programa en Ruby que procesa la llamada) ha devuelto el control a Asterisk. Saúl comentaba en asterisk-es que lanzara un AGI en la extensión h, extensión que se ejecuta al colgar el canal, pero el problema es que muchas variables importantes se destruyen al colgar.
Así que dándole vueltas pensando en una solución… ¡hey en MySQL ya existen los triggers! Tras leer un poco ya estaba el problema resuelto, aunque mis conocimientos de SQL son mínimos ahí va:
mysql> CREATE TRIGGER update_customer_credit -> AFTER INSERT ON cdr -> FOR EACH ROW UPDATE customers -> SET credit = credit - NEW.billsec * -> (SELECT rate FROM rates WHERE prefix = NEW.userfield) -> WHERE id = NEW.accountcode; Query OK, 0 rows affected (0.00 sec)