stored - Imprimir información de depuración del procedimiento almacenado en MySQL
mariadb debugger (3)
¿Hay alguna forma en MySQL para imprimir mensajes de depuración a stdout, temptable o logfile? Algo como:
-
print
en SQLServer -
DBMS_OUTPUT.PUT_LINE
en Oracle
Normalmente creo una tabla de registro con un procedimiento almacenado para iniciar sesión en ella. La llamada al procedimiento de registro siempre que sea necesario a partir del procedimiento en desarrollo.
En cuanto a otras publicaciones sobre esta misma pregunta, parece una práctica común, aunque hay algunas alternativas.
Una solución consiste simplemente en seleccionar sin ninguna otra cláusula.
Opción 1: ponga esto en su procedimiento para imprimir ''comment'' en stdout cuando se ejecute.
SELECT ''Comment'';
Opción 2: Pon esto en tu procedimiento para imprimir una variable con stdout:
declare myvar INT default 0;
SET myvar = 5;
SELECT concat(''myvar is '', myvar);
Esto imprime myvar is 5
a stdout cuando se ejecuta el procedimiento.
Opción 3, crear una tabla con una columna de texto llamada tmptable
y enviar mensajes a ella:
declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat(''myvar is '', myvar);
Podría poner lo anterior en un procedimiento almacenado, por lo que todo lo que tendría que escribir es esto:
CALL log(concat(''the value is'', myvar));
Lo que ahorra unas pocas teclas.
Opción 4, Registrar mensajes en un archivo
select "penguin" as log into outfile ''/tmp/result.txt'';
Hay restricciones muy fuertes en este comando. Solo puede escribir el archivo de salida en áreas del disco que le otorgan al grupo ''otros'' permisos de creación y escritura. Debería funcionar guardándolo en el directorio / tmp.
Además, una vez que escribe el archivo de salida, no puede sobrescribirlo. Esto es para evitar que los crackers arraiguen su caja solo porque tienen SQL inyectado en su sitio web y pueden ejecutar comandos arbitrarios en MySQL.