Вывести отладочную информацию из хранимой процедуры в MySQL - PullRequest
64 голосов
/ 23 июля 2010

Есть ли в MySQL способ печати отладочных сообщений в stdout, temptable или logfile?Что-то вроде:

  • print в SQLServer
  • DBMS_OUTPUT.PUT_LINE в Oracle

Ответы [ 4 ]

94 голосов
/ 23 октября 2013

Вариант 1. Включите это в свою процедуру, чтобы напечатать «комментарий» на стандартный вывод при его запуске.

SELECT 'Comment';

Вариант 2: вставьте это в вашу процедуру, чтобы напечатать переменную с ним в стандартный вывод:

declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);

Это печатает myvar is 5 в стандартный вывод при запуске процедуры.

Вариант 3. Создать таблицу с одним текстовым столбцом с именем tmptable и отправить в него сообщения:

declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);

Вы можете поместить вышеупомянутое в хранимую процедуру, поэтому все, что вам нужно будет написать, это:

CALL log(concat('the value is', myvar));

Что экономит несколько нажатий клавиш.

Вариант 4, Журнал сообщений в файл

select "penguin" as log into outfile '/tmp/result.txt';

У этой команды очень жесткие ограничения. Вы можете записать выходной файл только в те области диска, которые дают группе «другие» права на создание и запись. Должно работать сохранение его в каталог / tmp.

Также, как только вы напишите выходной файл, вы не сможете его перезаписать. Это сделано для того, чтобы взломщики не могли рутировать ваш ящик только потому, что они внедрили SQL на ваш сайт и могут выполнять произвольные команды в MySQL.

6 голосов
/ 23 июля 2010

Один из обходных путей - просто использовать select без каких-либо других предложений.

http://lists.mysql.com/mysql/197901

5 голосов
/ 23 июля 2010

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

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

1 голос
/ 24 декабря 2018

Быстрый способ напечатать что-нибудь:

select '** Place your mesage here' AS '** DEBUG:';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...