Как вы отлаживаете хранимые процедуры MySQL? - PullRequest
113 голосов
/ 07 ноября 2008

Мой текущий процесс отладки хранимых процедур очень прост. Я создаю таблицу с именем «debug», куда я вставляю значения переменных из хранимой процедуры во время ее выполнения. Это позволяет мне видеть значение любой переменной в данной точке сценария, но есть ли лучший способ отладки хранимых процедур MySQL?

Ответы [ 15 ]

57 голосов
/ 28 марта 2013

Следующая процедура debug_msg может быть вызвана для простого вывода отладочного сообщения на консоль:

DELIMITER $$

DROP PROCEDURE IF EXISTS `debug_msg`$$
DROP PROCEDURE IF EXISTS `test_procedure`$$

CREATE PROCEDURE debug_msg(enabled INTEGER, msg VARCHAR(255))
BEGIN
  IF enabled THEN BEGIN
    select concat("** ", msg) AS '** DEBUG:';
  END; END IF;
END $$

CREATE PROCEDURE test_procedure(arg1 INTEGER, arg2 INTEGER)
BEGIN
  SET @enabled = TRUE;

  call debug_msg(@enabled, "my first debug message");
  call debug_msg(@enabled, (select concat_ws('',"arg1:", arg1)));
  call debug_msg(TRUE, "This message always shows up");
  call debug_msg(FALSE, "This message will never show up");
END $$

DELIMITER ;

Затем запустите тест следующим образом:

CALL test_procedure(1,2)

Это приведет к следующему выводу:

** DEBUG:
** my first debug message
** DEBUG:
** arg1:1
** DEBUG:
** This message always shows up
40 голосов
/ 21 ноября 2008

Я делаю что-то очень похожее на тебя.

Обычно я включаю параметр DEBUG, который по умолчанию равен false, и я могу установить значение true во время выполнения. Затем оберните операторы отладки в блок «If DEBUG».

Я также использую таблицу журналов со многими своими работами, чтобы я мог просматривать процессы и сроки. Мой код отладки также получает вывод там. Я включаю имя вызывающего параметра, краткое описание, затронутое количество строк (при необходимости), поле комментариев и отметку времени.

Хорошие средства отладки - одна из печальных ошибок всех платформ SQL.

28 голосов
/ 26 марта 2010

Да, есть специальные инструменты для такого рода вещей - MySQL Debugger .
enter image description here

21 голосов
/ 31 августа 2010

В MySQL есть инструменты с графическим интерфейсом для отладки хранимых процедур / функции и скрипты. Достойный инструмент, который dbForge Studio for MySQL, обладает богатым функционалом и стабильностью.

19 голосов
/ 24 декабря 2013

Как отладить хранимую процедуру MySQL.

Отладчик бедного человека:

  1. Создайте таблицу с именем logtable с двумя столбцами, id INT и log VARCHAR(255).

  2. Сделать автоинкремент столбца id.

  3. Используйте эту процедуру:

    delimiter //
    DROP PROCEDURE `log_msg`//
    CREATE PROCEDURE `log_msg`(msg VARCHAR(255))
    BEGIN
        insert into logtable select 0, msg;
    END
    
  4. Поместите этот код в любое место, где вы хотите записать сообщение в таблицу.

    call log_msg(concat('myvar is: ', myvar, ' and myvar2 is: ', myvar2));
    

Это хороший быстрый и грязный регистратор, чтобы выяснить, что происходит.

8 голосов
/ 23 февраля 2015

Отладчик для mysql был хорош, но не бесплатен. Это то, что я использую сейчас:

DELIMITER GO$

DROP PROCEDURE IF EXISTS resetLog

GO$

Create Procedure resetLog() 
BEGIN   
    create table if not exists log (ts timestamp default current_timestamp, msg varchar(2048)) engine = myisam; 
    truncate table log;
END; 

GO$

DROP PROCEDURE IF EXISTS doLog 

GO$

Create Procedure doLog(in logMsg nvarchar(2048))
BEGIN  
  insert into log (msg) values(logMsg);
END;

GO$

Использование в хранимой процедуре:

call dolog(concat_ws(': ','@simple_term_taxonomy_id',  @simple_term_taxonomy_id));

использование хранимой процедуры:

call resetLog ();
call stored_proc();
select * from log;
8 голосов
/ 21 июня 2012

Другой способ представлен здесь

http://gilfster.blogspot.co.at/2006/03/debugging-stored-procedures-in-mysql.html

с пользовательскими процедурами отладки mySql и таблицами журналирования.

Вы также можете просто поместить в код простой выбор и посмотреть, будет ли он выполнен.

SELECT 'Message Text' AS `Title`; 

Я получил эту идею от

http://forums.mysql.com/read.php?99,78155,78225#msg-78225

Также кто-то создал шаблон для пользовательских процедур отладки на GitHub.

Смотрите здесь

http://www.bluegecko.net/mysql/debugging-stored-procedures/ https://github.com/CaptTofu/Stored-procedure-debugging-routines

был упомянут здесь

Как перехватить любое исключение в триггерах и сохранить процедуры для mysql?

7 голосов
/ 07 ноября 2008

Я просто помещаю операторы select в ключевые области хранимой процедуры, чтобы проверить текущее состояние наборов данных, а затем закомментирую их (--select ...) или удаляю их перед производством.

6 голосов
/ 07 марта 2016

Я опоздал на вечеринку, но принес еще пива:

http://ocelot.ca/blog/blog/2015/03/02/the-ocelotgui-debugger/ а также https://github.com/ocelot-inc/ocelotgui

Я пытался, и это кажется довольно стабильным, с поддержкой контрольных точек и переменных.

Это не полный набор (всего 4,1 Мб), но он мне очень помог!

Как это работает: Он интегрируется с вашим клиентом mysql (я использую Ubuntu 14.04), и после того, как вы выполните:

$install
$setup yourFunctionName

Он устанавливает новую базу данных на вашем сервере, которая контролирует процесс отладки. Итак:

$debug yourFunctionName('yourParameter')

даст вам возможность шаг за шагом пройтись по коду и, "обновив" свои переменные, вы сможете лучше увидеть, что происходит внутри вашего кода.

Важный совет: во время отладки, возможно, вы измените (заново создайте процедуру). После повторного создания выполните: $ exit и $ setup перед новым $ debug

Это альтернатива методам "insert" и "log". Ваш код не содержит дополнительных «отладочных» инструкций.

Скриншот:

ocelot breakpoint stepping

6 голосов
/ 24 декабря 2015

MySQL Connector / Net 6.6 имеет функцию Отладка хранимых процедур и функций

Установка отладчика

Чтобы включить отладчик хранимых процедур:

  • Для Connector / Net 6.6: установите Connector / Net 6.6 и выберите опцию Complete.
  • Для Connector / Net 6.7 и более поздних версий: установите продукт MySQL для Visual Studio, к которому принадлежит отладчик хранимых процедур.

Запуск отладчика

Чтобы запустить отладчик, выполните следующие действия:

  • Выберите соединение в Visual Studio Server Explorer.
  • Разверните папку «Хранимые процедуры». Только хранимые процедуры могут быть отлажены напрямую. Чтобы отладить пользовательскую функцию, создайте хранимую
    Процедура, которая вызывает функцию.
  • Щелкните по узлу хранимой процедуры, затем щелкните правой кнопкой мыши и в контекстном меню выберите «Отладочная процедура».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...