【发布时间】:2017-09-25 04:59:54
【问题描述】:
MySQL 版本:5.1.73 数据库客户端版本:libmysql - 5.1.73
我正在尝试检查最近一小时内 NEW.src 是否存在,如果不存在则执行 sys_exec udf。
我在mysql中有以下触发器。由于这是插入后触发器,我的 IF 条件将检查过去一小时内是否只有一个值,然后继续执行 sys_exec 语句。
BEGIN
SET @numofcalls = (SELECT count(src) FROM `cdr` WHERE calldate >= DATE_SUB(NOW(),INTERVAL 1 HOUR) AND src = NEW.src);
IF (numofcalls = 1) then
SET @missed_call = sys_exec(CONCAT('/usr/bin/php /var/lib/asterisk/agi-bin/api_pbx/call_api.php ', NEW.src));
END IF;
END
保存触发器时没有语法错误。当插入新记录时,sys_exec 语句似乎没有运行并退出 IF 条件。
有人可以建议我在这里做错了什么。
【问题讨论】:
-
如果在最后一小时没有 NEW.src 的重复项,那么您正在运行 sys_exec udf。所以你的 if 条件应该是 numofcalls = 0 而不是 numofcalls = 1。你还需要使用下面的查询 SELECT name FROM mysql.proc WHERE name = 'my_name' 来检查你的 udf 是否存在。
-
第一件事,因为这是插入后触发器,数据应该已经存在。因此 if 条件值为 1。其次,udf 在没有 if 条件或 select 查询的情况下工作,直接使用 after insert 触发器运行。
-
如果条件是 IF (numofcalls = 1) 那么。我认为应该是 IF (@numofcalls = 1)。其他然后这个我认为你的代码是好的。