2010-07-23 31 views

Respuesta

5

Por lo general crear tabla de registro con un procedimiento almacenado para conectarse a ella. La llamada al procedimiento de registro siempre que sea necesario a partir del procedimiento en desarrollo.

Al mirar other posts en esta misma pregunta, parece una práctica común, aunque hay algunas alternativas.

+3

La tabla de registro debe ser MyISAM, u otro motor de almacenamiento no transaccional, por lo que podría rastrear transacciones retrotraído incluso, – gaborsch

74

Opción 1: Pon esto en el procedimiento para imprimir 'comentario' a la salida estándar cuando se ejecuta.

SELECT 'Comment'; 

Opción 2: Pon esto en el procedimiento para imprimir una variable con él a la salida estándar:

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

Esto imprime myvar is 5 a la salida estándar cuando se ejecuta el procedimiento.

Opción 3, Crear una tabla con una columna de texto llamado tmptable, y empujar mensajes a ella:

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

se puede 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, mensajes de registro para presentar

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

Hay restricciones muy fuertes sobre 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.

También 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.

+2

MySQL se queja 'No se permite devolver un conjunto de resultados desde un desencadenante', ¿alguna idea? –

Cuestiones relacionadas