MySQL peut-il imprimer des messages de débogage sur stdout, tentemptable ou logfile? Quelque chose comme:
print
dans SQLServerDBMS_OUTPUT.PUT_LINE
dans OracleOption 1: Mettez ceci dans votre procédure pour imprimer le 'commentaire' sur la sortie standard lors de l'exécution.
SELECT 'Comment';
Option 2: Mettez ceci dans votre procédure pour imprimer une variable avec elle sur stdout:
declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);
Ceci affiche myvar is 5
sur stdout lors de l'exécution de la procédure.
Option 3, Créer une table avec une colonne de texte appelée tmptable
et envoyer des messages à cette dernière:
declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);
Vous pouvez mettre ce qui précède dans une procédure stockée, de sorte que tout ce que vous auriez à écrire est le suivant:
CALL log(concat('the value is', myvar));
Ce qui évite quelques frappes.
Option 4, Enregistrer les messages dans un fichier
select "penguin" as log into outfile '/tmp/result.txt';
Il y a de très fortes restrictions sur cette commande. Vous pouvez uniquement écrire le fichier de sortie dans des zones du disque qui accordent des autorisations de création et d'écriture au groupe "autres". Cela devrait fonctionner en le sauvegardant dans le répertoire/tmp.
De plus, une fois que vous avez écrit le fichier de sortie, vous ne pouvez pas l'écraser. Cela empêche les pirates de rooter votre ordinateur simplement parce qu’ils ont injecté du code SQL sur votre site Web et qu’ils peuvent exécuter des commandes arbitraires dans MySQL.
Une solution de contournement consiste à utiliser select sans autres clauses.
Je crée habituellement une table de journalisation avec une procédure stockée pour la journalisation. Appelez la procédure de journalisation, le cas échéant, à partir de la procédure en cours de développement.
En regardant autres messages sur cette même question, cela semble être une pratique courante, bien qu'il existe quelques alternatives.
Un moyen rapide d’imprimer quelque chose est:
select '** Place your mesage here' AS '** DEBUG:';