PL SQL触发更新单个列时更新行的开始时间

时间:2016-02-01 09:45:20

标签: mysql plsql triggers

我对触发器很新,并且已经尝试过搜索我的问题的解决方案,结果不多。我想在活动列设置为1时更新单行的开始时间列。

我在ACTIVE中有两列START_TIME(数字)和my_table(时间戳)。我想创建一个PL / SQL触发器,只要将START_TIME语句应用于current_timestamp列,将update列更新为ACTIVE - 将其设置为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; 
\

2 个答案:

答案 0 :(得分:0)

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

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; 

答案 1 :(得分:0)

我认为它应该是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;