我对触发器很新,并且已经尝试过搜索我的问题的解决方案,结果不多。我想在活动列设置为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;
\
答案 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;