MySQL SP Debugging

Ok, esto es algo que debes hacer si no tienes para comprar una herramienta estilo dbForge (btw… cuidado con los acentos en dbForge, puedes perder tu código) o si tu base de datos está por debajo de la v. 8.0 de MySQL o si usas Maria DB y … un largo etc.

Primero hay que crear una tabla:

CREATE TABLE IF NOT EXISTS debug (
proc_id varchar(100) DEFAULT NULL,
debug_output text,
line_id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (line_id)
) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=latin1;

Y lo siguiente son 4 SPs, los primeros tres son los que definen la funcionalidad de esta forma de hacer debugging, el último muestra cómo utilizar los primeros tres.

CREATE PROCEDURE debug_insert (IN p_proc_id VARCHAR(100), IN p_debug_info TEXT) 
BEGIN
insert into debug (proc_id,debug_output) values (p_proc_id,p_debug_info);
END 

CREATE PROCEDURE debug_off (IN p_proc_id VARCHAR(100)) 
BEGIN
call debug_insert(p_proc_id,concat('Debug Ended :',now()));
select debug_output from debug where proc_id = p_proc_id order by line_id;
delete from debug where proc_id = p_proc_id;
END

CREATE PROCEDURE debug_on (IN p_proc_id VARCHAR(100)) 
BEGIN
call debug_insert(p_proc_id,concat('Debug Started :',now()));
END 

CREATE PROCEDURE test_debug () 
BEGIN
declare l_proc_id varchar(100) default 'test_debug';
call debug_on(l_proc_id);
call debug_insert(l_proc_id,'Testing Debug');
call debug_off(l_proc_id);
END 

El siguiente trozo de código es otro ejemplo de las llamadas del SP a hacer debugging:

DECLARE p_proc_id VARCHAR(100);
SET @p_proc_id:="cp_inventario_inicial_mp";

SET @cp:=(SELECT inventario FROM costos_produccion WHERE periodo=1);
CALL debug_on(@p_proc_id);
CALL debug_insert(@p_proc_id,CONCAT("cp",@cp));
CALL debug_off(@p_proc_id);

Únicamente a manera de comentario, no se puede llamar dentro de funciones, sólo dentro de SPs, para usarlo dentro de funciones inspeccionen la tabla directamente y omitan la llamada a debug_off

Todo esto lo tomé de esta página después de sufrir pérdida de trabajo con dbForge me quedé con este método para hacer debugging.