MySQL - 可以调用函数来执行触发器操作吗?

标签 mysql function triggers

在我的架构中,我有许多带有需要填充的公共(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/

相关文章:

mysql - 修改 MySQL 查询以停止将临时表写入磁盘

mysql - 在 Bash 脚本中使用 & 有缺点吗?

r - 如何使用 for 循环将函数应用于数据框中列中的特定值

function - 将 x 添加到列表的第 n 项的 lisp 函数

r - Gompertz R 中的老化分析

MySQL:如何将参数传递给触发器

javascript - 在延迟加载页面时触发 CSS 转换

mysql - SQL 将所有内容打印在一行中

sqlite - 如何在sqlite中插入触发器之前进行验证

php - 使用其他两列的过滤器减去一列中的值