Вариант 1. Поместите это в свою процедуру, чтобы печатать «комментарий» к стандартному выводу при ее запуске.
SELECT'Comment';
Вариант 2: Поместите это в свою процедуру, чтобы распечатать переменную с ней в stdout:
declare myvar INTdefault0;
SET myvar = 5;
SELECTconcat('myvar is ', myvar);
Это выводится myvar is 5на стандартный вывод при запуске процедуры.
Вариант 3. Создайте таблицу с одним текстовым столбцом tmptableи отправьте в нее сообщения:
declare myvar INTdefault0;
SET myvar = 5;
insertinto tmptable selectconcat('myvar is ', myvar);
Вы можете поместить это в хранимую процедуру, поэтому все, что вам нужно будет написать, это следующее:
CALLlog(concat('the value is', myvar));
Что экономит несколько нажатий клавиш.
Вариант 4, записывать сообщения в файл
select"penguin"aslogintooutfile'/tmp/result.txt';
На эту команду накладываются очень серьезные ограничения. Вы можете записывать исходящий файл только в те области на диске, которые предоставляют «другим» группам права на создание и запись. Он должен работать, сохраняя его в каталог / tmp.
Также, как только вы напишете файл Outfile, вы не сможете его перезаписать. Это сделано для того, чтобы взломщики не укоренили ваш компьютер только потому, что они внедрили SQL на ваш сайт и могут запускать произвольные команды в MySQL.
Таблица журнала должна быть MyISAM или другим механизмом хранения, не связанным с транзакциями, чтобы вы могли отслеживать даже откат транзакций,
Габорш
4
Вот как я буду отлаживать:
CREATEPROCEDURE procedure_name()
BEGINDECLAREEXITHANDLERFOR SQLEXCEPTION
BEGINSHOWERRORS; --this is the only one which you needROLLBACK;
END;
STARTTRANSACTION;
--query 1--query 2--query 3COMMIT;
END
Если запрос 1, 2 или 3 выдаст ошибку, HANDLER поймает SQLEXCEPTION, а SHOW ERRORS покажет нам ошибки. Примечание: SHOW ERRORS должно быть первым оператором в HANDLER.
Ответы:
Вариант 1. Поместите это в свою процедуру, чтобы печатать «комментарий» к стандартному выводу при ее запуске.
SELECT 'Comment';
Вариант 2: Поместите это в свою процедуру, чтобы распечатать переменную с ней в stdout:
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.
Также, как только вы напишете файл Outfile, вы не сможете его перезаписать. Это сделано для того, чтобы взломщики не укоренили ваш компьютер только потому, что они внедрили SQL на ваш сайт и могут запускать произвольные команды в MySQL.
источник
Not allowed to return a result set from a trigger
, есть идеи?Один способ обхода - просто использовать select без каких-либо других предложений.
http://lists.mysql.com/mysql/197901
источник
Быстрый способ что-то напечатать:
select '** Place your mesage here' AS '** DEBUG:';
источник
Обычно я создаю таблицу журнала с хранимой процедурой для входа в нее. Вызов процедуры регистрации, где это необходимо, из разрабатываемой процедуры.
Глядя на другие сообщения по этому же вопросу, это кажется обычной практикой, хотя есть некоторые альтернативы.
источник
Вот как я буду отлаживать:
CREATE PROCEDURE procedure_name() BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SHOW ERRORS; --this is the only one which you need ROLLBACK; END; START TRANSACTION; --query 1 --query 2 --query 3 COMMIT; END
Если запрос 1, 2 или 3 выдаст ошибку, HANDLER поймает SQLEXCEPTION, а SHOW ERRORS покажет нам ошибки. Примечание: SHOW ERRORS должно быть первым оператором в HANDLER.
источник