【问题标题】:PL SQL Trigger to update start time for row when a single column is updated更新单列时更新行的开始时间的 PL SQL 触发器
【发布时间】:2016-02-03 01:18:21
【问题描述】:

我对触发器还很陌生,并且已经尝试为我的问题寻找解决方案,但收效甚微。我想在活动列设置为 1 时更新单行的开始时间列。

我在my_table 中有两列ACTIVE(数字)和START_TIME(时间戳)。我想创建一个 PL/SQL 触发器,每当 update 语句应用于 ACTIVE 列时,将 START_TIME 列更新为 current_timestamp - 将其设置为 1。

到目前为止,我只看到了插入新行或更新整个表的示例,这不是我想要做的。我原以为我的问题会有一个相当简单的解决方案。

这是迄今为止我从其他示例中得到的。我知道我的解决方案的结构很差,我要求任何输入来修改我的触发器以达到我想要的结果。

CREATE OR REPLACE TRIGGER routine_active
AFTER UPDATE ON my_table 
FOR EACH ROW 
WHEN (my_table.ACTIVE = 1)
begin
    insert my_table.start_time = current_timestamp; 
end; 
\

【问题讨论】:

    标签: mysql plsql triggers


    【解决方案1】:

    你可以像这样使用它。它可以帮助你 编写更新查询而不是插入查询

    CREATE OR REPLACE TRIGGER routine_active
    AFTER UPDATE ON my_table 
    FOR EACH ROW 
    WHEN (new.ACTIVE = 1)
     begin
      update my_table  set start_time =current_timestamp;
     end; 
    

    【讨论】:

      【解决方案2】:

      我认为它应该是 BEFORE UPDATE,而不是 AFTER UPDATE,因此它可以通过一个操作保存两个更改。那么你就不需要 INSERT 或 UPDATE 语句了。我还添加了“OF active”子句,所以它只会在该列被更新时启动这个触发器,如果​​其他列被更新,这可能会减少工作量。

      CREATE OR REPLACE TRIGGER routine_active
          BEFORE UPDATE OF active ON my_table
          FOR EACH ROW
      BEGIN
          IF active = 1
          THEN
              :NEW.start_time = current_timestamp;
          END IF;
      END;
      

      【讨论】:

        猜你喜欢
        • 2018-05-24
        • 1970-01-01
        • 2012-03-06
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多