Db2技术需求实现:当布尔列IS_SUBMITTED设为True时自动更新时间戳列TIME_SUBMITTED
当然可以实现!用Db2触发器轻松搞定你的需求
你的思路完全正确,Db2的触发器刚好能完美解决这种「当某列状态变更时自动关联更新另一列」的场景。作为Db2新手,我给你一步步拆解实现过程,代码都给你写好,放心用:
第一步:新增TIME_SUBMITTED列
先执行ALTER TABLE语句添加需要的时间戳列,默认值设为NULL:
ALTER TABLE 你的表名 ADD COLUMN TIME_SUBMITTED TIMESTAMP DEFAULT NULL;
记得把你的表名替换成你实际的表名称哦。
第二步:创建BEFORE UPDATE触发器
这个触发器会在更新IS_SUBMITTED列时触发,当它被设置为TRUE时,自动把TIME_SUBMITTED设为当前时间戳:
CREATE OR REPLACE TRIGGER TRG_UPDATE_SUBMIT_TIME BEFORE UPDATE OF IS_SUBMITTED ON 你的表名 FOR EACH ROW WHEN (NEW.IS_SUBMITTED = TRUE) BEGIN SET NEW.TIME_SUBMITTED = CURRENT_TIMESTAMP; END;
简单解释下代码逻辑:
CREATE OR REPLACE TRIGGER:创建(或替换已存在的)触发器,名字TRG_UPDATE_SUBMIT_TIME是自定义的,只要见名知意就行BEFORE UPDATE OF IS_SUBMITTED:指定只在更新IS_SUBMITTED列时触发,避免不必要的性能消耗FOR EACH ROW:对每一条被更新的行都执行触发器逻辑WHEN (NEW.IS_SUBMITTED = TRUE):只有当更新后的IS_SUBMITTED值为TRUE时,才执行后续的时间戳更新操作SET NEW.TIME_SUBMITTED = CURRENT_TIMESTAMP:把当前行的TIME_SUBMITTED字段设为Db2的当前系统时间戳
可选补充:处理插入时直接设为TRUE的场景
如果你的业务里存在「插入数据时就把IS_SUBMITTED设为TRUE」的情况,可以再创建一个INSERT触发器,自动填充时间戳:
CREATE OR REPLACE TRIGGER TRG_INSERT_SUBMIT_TIME BEFORE INSERT ON 你的表名 FOR EACH ROW WHEN (NEW.IS_SUBMITTED = TRUE) BEGIN SET NEW.TIME_SUBMITTED = CURRENT_TIMESTAMP; END;
测试验证
执行一条更新语句试试效果:
UPDATE 你的表名 SET IS_SUBMITTED = TRUE WHERE 你的筛选条件;
之后查询对应行,就能看到TIME_SUBMITTED已经自动变成当前时间啦!
内容的提问来源于stack exchange,提问作者A. Lewis
相关产品推荐
相关产品推荐

