【问题标题】:Trigger needs to fire only when column value is today's date仅当列值为今天的日期时才需要触发触发器
【发布时间】:2017-12-10 03:51:40
【问题描述】:

当 column_value 匹配特定场景时,我想在数据库中应用触发器

goal 表中有目标、状态、开始日期、结束日期等字段

现在我想更改目标的状态。当用户输入他/她的目标时,他/她填写了 end_Date。现在我想在 end_Date 与当前日期匹配时更改目标的状态

例子:-

+------+--------+--------------+-------------+
| GOAL | STATUS | START_DATE   | END_DATE    |
+------+--------+--------------+-------------+
|    1 | Active | 2017-07-03   | 2017-07-09  |
+------+--------+------------+---------------+

当 END_DATE 等于当前日期时,我想将状态 'Active' 更改为 'Finished'

我希望我能够理解我的问题。

提前致谢!

【问题讨论】:

  • 请添加您目前所拥有的脚本,我们将帮助改进它
  • 触发更新/插入/删除操作时触发。我认为您需要查看事件或 cron(对于 linux)。
  • @BHouse 想做数据库所以需要脚本
  • @P.Salmon 所以我可以在插入时添加检查
  • 您无法控制触发器何时触发,但您可以控制它会做什么。只需将该检查添加到您的触发逻辑。

标签: mysql sql database date triggers


【解决方案1】:

这样做的逻辑是

DROP TRIGGER IF EXISTS TB;
DELIMITER //
CREATE TRIGGER TB BEFORE INSERT ON T
FOR EACH ROW
BEGIN

 IF NEW.START_DT = DATE(NOW()) THEN
    SET NEW.STATUS = 'YES' ;
 end if;
END //
DELIMITER ;

  use sandbox;
DROP TABLE IF EXISTS T;
CREATE TABLE T(GOAL INT, STATUS VARCHAR(3), START_DT DATE,END_DATE DATE);
mysql> TRUNCATE TABLE T;INSERT INTO T VALUES(1,NULL,'2017-07-06','2017-07-06');SELECT * FROM T;
Query OK, 0 rows affected (0.73 sec)

Query OK, 1 row affected (0.06 sec)

+------+--------+------------+------------+
| GOAL | STATUS | START_DT   | END_DATE   |
+------+--------+------------+------------+
|    1 | YES    | 2017-07-06 | 2017-07-06 |
+------+--------+------------+------------+
1 row in set (0.00 sec)

【讨论】:

    【解决方案2】:

    oracle 表级触发器的主体如下所示...

    BEGIN
      IF INSERTING and (:new.end_date = sysdate) THEN
        :NEW.goal_status := desired_value;
      ELSIF UPDATING AND (:new.end_date = sysdate) then
        :NEW.goal_status := desired_value;
      END IF;
    End;
    

    【讨论】:

      猜你喜欢
      • 2014-08-11
      • 2018-08-01
      • 2020-09-11
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2021-04-30
      相关资源
      最近更新 更多