MySQL Debugging

Bei der Programmierung von gespeicherte Routinen für den MySQL vermisst man ein Äquivalent zum Oracle Package „dbms_output“. Wir haben uns mit folgender Lösung beholfen.

In einer zusätzlichen Datenbank „dbmc“ wird eine Tabelle „debug_output“ angelegt.

[code lang=“sql“]CREATE DATABASE dbmc;

DROP TABLE IF EXISTS `dbmc`.`debug_output`;
CREATE TABLE `dbmc`.`debug_output` (
`proc_id` varchar(100) default NULL,
`debug_output` text,
`line_id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`line_id`)
);[/code]

Die drei Prozeduren „debug_on“, „debug_insert“ und „debug_show“ ermöglichen uns den Zugriff auf die Debugging-Informationen.

[code lang=“sql“]DELIMITER $$

DROP PROCEDURE IF EXISTS `dbmc`.`debug_on` $$
CREATE PROCEDURE `dbmc`.`debug_on`(in $proc_id varchar(100))
begin
declare $committer int default -1;
select count(proc_id) into $committer from dbmc.debug_output
where proc_id = $proc_id;
if $committer > 0 then
delete from dbmc.debug_output where proc_id = $proc_id;
end if;
insert into dbmc.debug_output (proc_id,debug_output)
values ($proc_id, concat(‚debug started: ‚, now()));
end $$

DROP PROCEDURE IF EXISTS `dbmc`.`debug_insert` $$
CREATE PROCEDURE `dbmc`.`debug_insert`(in $proc_id varchar(100),in $debug text)
begin
declare $committer int default -1;
select count(proc_id) into $committer from dbmc.debug_output
where proc_id = $proc_id;
if $committer > 0 then
insert into dbmc.debug_output (proc_id,debug_output)
values ($proc_id, $debug);
end if;
end $$

DROP PROCEDURE IF EXISTS `dbmc`.`debug_show` $$
CREATE PROCEDURE `dbmc`.`debug_show`(in $proc_id varchar(100))
begin
select debug_output from dbmc.debug_output where proc_id = $proc_id order by line_id;
end $$

DELIMITER ;[/code]

Bei der Anwendung schaltet man mit „dbmc.debug_on(‚ABC‘)“ die Protokollierung ein. Während der Ausführung erfasst man die Informtionen mit „dbmc.debug_insert(‚ABC‘, ‚hallo welt!‘)“. Bis zu einem Neustart der Anwendung kann man die erfassten Zeilen mit „dbmc.debug_show(‚ABC‘)“ abrufen.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.