Мне нужно отслеживать изменения (контрольный журнал) в определенных таблицах в 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