在我的架构中,我有许多带有需要填充的公共(public)字段的表。这基本上是像这样的控制字段:
id_db_user
date_creation
date_last_update
我已经完成了两个触发器来填充此字段:
-- Trigger DDL Statements
delimiter |
CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES
FOR EACH ROW BEGIN
SET NEW.id_db_user = current_user;
SET NEW.date_creation = current_timestamp;
END;
| delimiter ;
delimiter |
CREATE TRIGGER control_update BEFORE UPDATE ON EZT_SOCIETIES
FOR EACH ROW BEGIN
SET NEW.date_last_update = current_timestamp;
END;
| delimiter ;
我的问题是:我可以编写一些函数来调用触发器内的操作吗?像这样的事情:
function fn_control_insert
SET NEW.id_db_user = current_user;
SET NEW.date_creation = current_timestamp;
然后在触发器中调用此函数,如下所示:
delimiter |
CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES
FOR EACH ROW BEGIN
call fn_control_insert;
END;
| delimiter ;
这可以在 MySQL 中实现吗?
最诚挚的问候,
最佳答案
不,不幸的是,这是不可能的,您也不能将 NEW 和 OLD 作为参数传递,函数参数也不能是 OUT 或 INOUT(即可写),所以简短的答案是否定的。
您可以从触发器调用函数(前提是该函数不违反任何 MySQL 触发器限制,例如修改触发器附加到的表),但您必须在每个单独的 NEW 或您需要读取的 OLD 字段,并且该函数将无法写入它们 - 您从函数中所能做的就是返回一个值。
关于MySQL - 可以调用函数来执行触发器操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10910296/