在MySQL中使用存储过程创建触发器
是否可以构建一个在MySQL中创建触发器的存储过程?在MySQL中使用存储过程创建触发器,mysql,stored-procedures,triggers,Mysql,Stored Procedures,Triggers,是否可以构建一个在MySQL中创建触发器的存储过程? 我有下面的存储过程,它工作正常,但它只输出创建触发器的代码,但实际上并没有创建触发器 DELIMITER $ CREATE PROCEDURE addCustomerLogTrigger() BEGIN SELECT CONCAT( 'CREATE TRIGGER customer_audit AFTER UPDATE ON customer FOR EACH ROW BEGIN ', GROUP_CO
我有下面的存储过程,它工作正常,但它只输出创建触发器的代码,但实际上并没有创建触发器
DELIMITER $
CREATE PROCEDURE addCustomerLogTrigger()
BEGIN
SELECT CONCAT(
'CREATE TRIGGER customer_audit AFTER UPDATE ON customer FOR EACH ROW BEGIN ',
GROUP_CONCAT(
CONCAT(
'IF OLD.', column_name, ' != NEW.', column_name, ' THEN INSERT INTO st_person_audit_log (',
'id, ',
'fieldName, ',
'old_value, ',
'new_value, ',
'time_stamp, ',
'person_id'
') VALUES (
NEW.id,
''', column_name, ''',
OLD.', column_name, ',
NEW.', column_name, ',
NOW(),
NEW.last_updated_by
); END IF;'
)
SEPARATOR ' '
), ' END;$'
)
FROM
information_schema.columns
WHERE
table_schema = database()
AND table_name = 'customer';
END$
DELIMITER ;
有没有一种方法可以一次性创建它?
我从他那里得到了它,并根据我的需要做了一些调整
仅供参考,每当客户表中发生变化时,此触发器会将旧/新值对插入审核表中。不,即使使用MySQL准备的语句,也不可能。也不是在两步或几步之内?MySQL会抛出一个错误—“无法从另一个存储例程中创建触发器”。从应用程序中创建触发器或查看数据库架构,避免动态创建触发器。好的,谢谢。这只是为了在我更改模式之后,我可以运行该过程并更新触发器。但是我想我必须手动完成最后一步。如果你通过一个准备好的语句来尝试,你会得到-ERROR 1295(HY000):这个命令在准备好的语句协议中不受支持,答案中说是的。