Muchas veces, cuando se desarrollan procedimientos almacenados (stored procedures) más o menos complejos, podemos dar con errores que nos pueden hacer perder mucho tiempo, y a veces la solución es visualizar el valor de una variable en un punto determinado del código.
Aquí va una pequeña ayuda, es un código muy sencillo que podemos insertar en nuestra base de datos y nos permitirá escribir en una tabla lo que va pasando.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | DROP SCHEMA IF EXISTS `PBUtils` ; CREATE SCHEMA IF NOT EXISTS `PBUtils` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; USE PBUtils; DROP TABLE IF EXISTS `PBUtils`.`LOG`; CREATE TABLE IF NOT EXISTS `PBUtils`.`LOG` ( `Log_id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, `Log_date` DATETIME NOT NULL, `Log_description` varchar(128) NOT NULL, `Log_text` TEXT NULL, `Log_number` bigint NULL, `Log_float` double NULL, PRIMARY KEY(Log_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; DELIMITER $$ DROP PROCEDURE IF EXISTS `PBUtils`.`logText` $$ CREATE PROCEDURE `PBUtils`.`logText`( IN In_description VARCHAR(128), IN In_text TEXT ) BEGIN INSERT INTO PBUtils.LOG (`Log_date`, `Log_description`, `Log_text`) VALUES (NOW(), In_description, In_text); END $$ DELIMITER ; DELIMITER $$ DROP PROCEDURE IF EXISTS `PBUtils`.`logNumber` $$ CREATE PROCEDURE `PBUtils`.`logNumber`( IN In_description VARCHAR(128), IN In_number bigint ) BEGIN INSERT INTO PBUtils.LOG (`Log_date`, `Log_description`, `Log_number`) VALUES (NOW(), In_description, In_number); END $$ DELIMITER ; DELIMITER $$ DROP PROCEDURE IF EXISTS `PBUtils`.`logFloat` $$ CREATE PROCEDURE `PBUtils`.`logFloat`( IN In_description VARCHAR(128), IN In_float double ) BEGIN INSERT INTO PBUtils.LOG (`Log_date`, `Log_description`, `Log_float`) VALUES (NOW(), In_description, In_float); END $$ DELIMITER ; |
A parti de ahora, lo que debemos hacer es insertar en cualquier punto de nuestro procedimiento:
1 | PBUtils.logText('Lo que vamos a mostrar', variable); |
1 | PBUtils.logNumber('Lo que vamos a mostrar', variable); |
1 | PBUtils.logFloat('Lo que vamos a mostrar', variable); |
dependiendo de si lo que queremos mostrar es un texto, un número entero o un float.
Para ver el log, simplemente tenemos que hacer la consulta:
También podemos crearnos una vista, pero esta consulta podemos ejecutarla periódicamente para ver si hay cambios.
Pingback: Bitacoras.com /
Pingback: Logging en MySQL « DbRunas – Noticias y Recursos sobre Bases de Datos /