You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Oracle触发器实现插入table1时同步数据到table2并记录插入时间?

Oracle 触发器实现数据同步与插入时间自动记录

需求回顾

  • 向 table1 插入数据时,同步将对应 id 和 data 插入 table2
  • 自动给 table1 的每条新记录填充 insertion_time 列的插入时间

解决方案

方案1:拆分两个独立触发器

触发器1:自动填充插入时间

这个行级触发器在插入 table1 前触发,为新行的 insertion_time 赋值当前系统时间:

CREATE OR REPLACE TRIGGER trg_table1_set_insert_time
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
  :NEW.insertion_time := SYSTIMESTAMP; -- 如需秒级精度,可替换为 SYSDATE
END;
/

触发器2:同步数据到 table2

这个行级触发器在 table1 插入完成后,把新行的 id 和 data 插入 table2:

CREATE OR REPLACE TRIGGER trg_table1_sync_to_table2
AFTER INSERT ON table1
FOR EACH ROW
BEGIN
  INSERT INTO table2(id, data)
  VALUES(:NEW.id, :NEW.data);
END;
/

方案2:合并为单个触发器

如果不想维护多个触发器,可以把两个逻辑合并到一个触发器中:

CREATE OR REPLACE TRIGGER trg_table1_insert_and_sync
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
  -- 自动填充插入时间
  :NEW.insertion_time := SYSTIMESTAMP;
  -- 同步插入数据到 table2
  INSERT INTO table2(id, data)
  VALUES(:NEW.id, :NEW.data);
END;
/

关键注意点

  • 若 table2 的 id 是主键或有唯一约束,必须保证 table1 插入的 id 在 table2 中不存在,否则触发器会抛出唯一性冲突异常
  • SYSTIMESTAMP 返回带时区的高精度时间(精确到微秒),SYSDATE 仅返回当前日期时间(精确到秒),可根据业务需求选择
  • 两个方案都是行级触发器(FOR EACH ROW),确保每一行插入操作都会触发对应逻辑

内容的提问来源于stack exchange,提问作者Ibrahim Khalil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:37:05