MySQL db Audit Trail Trigger - PullRequest
       36

MySQL db Audit Trail Trigger

2 голосов
/ 07 мая 2010

Мне нужно отслеживать изменения (контрольный журнал) в определенных таблицах в MySql Db. Я пытаюсь реализовать предложенное решение здесь .

У меня есть таблица AuditLog со следующими столбцами: AuditLogID, TableName, RowPK, FieldName, OldValue, NewValue, TimeStamp.

Хранимая процедура mysql выглядит следующим образом (она выполняется нормально и создает процедуру):

Вызов процедуры, такой как: CALL addLogTrigger ('ProductTypes', 'ProductTypeID'); выполняется, но не создает никаких триггеров (см. изображение). SHOW TRIGGERS возвращает пустой набор.

Пожалуйста, дайте мне знать, в чем может быть проблема, или альтернативный способ реализовать это.

    DROP PROCEDURE IF EXISTS addLogTrigger;
DELIMITER $
CREATE PROCEDURE addLogTrigger(IN tableName VARCHAR(255), IN pkField VARCHAR(255))
BEGIN

    SELECT CONCAT(
    'DELIMITER $\n', 'CREATE TRIGGER ', tableName, '_AU AFTER UPDATE ON ', tableName, ' FOR EACH ROW BEGIN ',
        GROUP_CONCAT(
            CONCAT(
          'IF NOT( OLD.', column_name, ' <=> NEW.', column_name, ') THEN INSERT INTO AuditLog (',
                    'TableName, ',
                    'RowPK, ',
                    'FieldName, ',
                    'OldValue, ',
                    'NewValue'
                    ') VALUES ( ''',
                    table_name, ''', NEW.',
                    pkField, ', ''',
                    column_name, ''', OLD.',
                    column_name, ', NEW.',
                    column_name,
                '); END IF;'
            )
            SEPARATOR ' '
            ), ' END;$'
        ) 
        FROM 
            information_schema.columns 
        WHERE 
            table_schema = database()
            AND table_name = tableName;

END$
DELIMITER ;

альтернативный текст http://pssnet.com/~devone/pssops3/testing/callprocedure.png

1 Ответ

1 голос
/ 10 мая 2010

Я думаю, вы обнаружите, что эта хранимая процедура не создает триггеры; он создает операторы SQL для создания триггеров. Скопируйте вывод этой процедуры в файл и запустите его.

Глядя на вывод, в нем появляются некоторые ложные символы вертикальной черты, которые могут создать проблемы; мое зрение не такое, как могло бы быть, поэтому я не уверен.

...