Option 1: Fügen Sie dies in Ihre Prozedur ein, um 'Kommentar' zu stdout zu drucken, wenn es ausgeführt wird.
SELECT'Comment';
Option 2: Fügen Sie dies in Ihre Prozedur ein, um eine Variable damit zu stdout zu drucken:
declare myvar INT default0;SET myvar =5;SELECT concat('myvar is ', myvar);
Dies wird myvar is 5bei Ausführung der Prozedur auf stdout gedruckt .
Option 3: Erstellen Sie eine Tabelle mit einer aufgerufenen tmptableTextspalte und senden Sie Nachrichten an diese:
declare myvar INT default0;SET myvar =5;insertinto tmptable select concat('myvar is ', myvar);
Sie könnten das Obige in eine gespeicherte Prozedur einfügen, sodass Sie nur Folgendes schreiben müssten:
CALL log(concat('the value is', myvar));
Das spart ein paar Tastenanschläge.
Option 4, Nachrichten in Datei protokollieren
select"penguin"as log into outfile '/tmp/result.txt';
Dieser Befehl unterliegt sehr starken Einschränkungen. Sie können die Outfile nur in Bereiche auf der Festplatte schreiben, die der Gruppe "Andere" Erstellungs- und Schreibberechtigungen erteilen. Es sollte funktionieren, wenn es im Verzeichnis / tmp gespeichert wird.
Auch wenn Sie das Outfile einmal geschrieben haben, können Sie es nicht mehr überschreiben. Dies soll verhindern, dass Cracker Ihre Box rooten, nur weil sie SQL in Ihre Website injiziert haben und beliebige Befehle in MySQL ausführen können.
Normalerweise erstelle ich eine Protokolltabelle mit einer gespeicherten Prozedur, um mich dort anzumelden. Rufen Sie die Protokollierungsprozedur auf, wo immer dies aus der in der Entwicklung befindlichen Prozedur erforderlich ist.
Wenn man sich andere Beiträge zu dieser Frage ansieht, scheint dies eine gängige Praxis zu sein, obwohl es einige Alternativen gibt.
CREATEPROCEDURE procedure_name()BEGINDECLAREEXIT HANDLER FOR SQLEXCEPTIONBEGIN
SHOW ERRORS;--this is the only one which you needROLLBACK;END;STARTTRANSACTION;--query 1--query 2--query 3COMMIT;END
Wenn Abfrage 1, 2 oder 3 einen Fehler auslösen, fängt HANDLER die SQLEXCEPTION ab und SHOW ERRORS zeigt Fehler für uns an. Hinweis: SHOW ERRORS sollte die erste Anweisung im HANDLER sein.
Antworten:
Option 1: Fügen Sie dies in Ihre Prozedur ein, um 'Kommentar' zu stdout zu drucken, wenn es ausgeführt wird.
Option 2: Fügen Sie dies in Ihre Prozedur ein, um eine Variable damit zu stdout zu drucken:
Dies wird
myvar is 5
bei Ausführung der Prozedur auf stdout gedruckt .Option 3: Erstellen Sie eine Tabelle mit einer aufgerufenen
tmptable
Textspalte und senden Sie Nachrichten an diese:Sie könnten das Obige in eine gespeicherte Prozedur einfügen, sodass Sie nur Folgendes schreiben müssten:
Das spart ein paar Tastenanschläge.
Option 4, Nachrichten in Datei protokollieren
Dieser Befehl unterliegt sehr starken Einschränkungen. Sie können die Outfile nur in Bereiche auf der Festplatte schreiben, die der Gruppe "Andere" Erstellungs- und Schreibberechtigungen erteilen. Es sollte funktionieren, wenn es im Verzeichnis / tmp gespeichert wird.
Auch wenn Sie das Outfile einmal geschrieben haben, können Sie es nicht mehr überschreiben. Dies soll verhindern, dass Cracker Ihre Box rooten, nur weil sie SQL in Ihre Website injiziert haben und beliebige Befehle in MySQL ausführen können.
quelle
Not allowed to return a result set from a trigger
, eine Idee?Eine Problemumgehung besteht darin, select ohne weitere Klauseln zu verwenden.
http://lists.mysql.com/mysql/197901
quelle
Normalerweise erstelle ich eine Protokolltabelle mit einer gespeicherten Prozedur, um mich dort anzumelden. Rufen Sie die Protokollierungsprozedur auf, wo immer dies aus der in der Entwicklung befindlichen Prozedur erforderlich ist.
Wenn man sich andere Beiträge zu dieser Frage ansieht, scheint dies eine gängige Praxis zu sein, obwohl es einige Alternativen gibt.
quelle
Der schnelle Weg, etwas zu drucken, ist:
quelle
So werde ich debuggen:
Wenn Abfrage 1, 2 oder 3 einen Fehler auslösen, fängt HANDLER die SQLEXCEPTION ab und SHOW ERRORS zeigt Fehler für uns an. Hinweis: SHOW ERRORS sollte die erste Anweisung im HANDLER sein.
quelle