请教:一个用于跟踪数据更新的触发器

holy_phoenix 2004-09-30 11:46:17
我想写一个trigger,要求是这样的:
有一张数据表data_tbl,一张用于定义要跟踪的字段的表item_tbl,一张用于记录更新变化的表history_tbl。
在data_tbl中有个字段被更新的时候,要将其更新前后的值记录到history_tbl中,这个字段的名称记录在item_tbl。举个例子:
data_tbl
-----------
people
place
time

item_tbl
-----------
time

history_tbl
-----------
item_id
old_value
new_value
也就是说当data_tbl中time字段被更新的时候把其更新前后的值写到history_tbl。

请问如何写一个trigger有效地完成这个任务?


多谢!!!
...全文
154 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2004-10-10
  • 打赏
  • 举报
回复
还是不明白你的意思
holy_phoenix 2004-10-10
  • 打赏
  • 举报
回复
自己顶一顶
holy_phoenix 2004-09-30
  • 打赏
  • 举报
回复
谢谢tomhuang(春城)。我的想法也是这样,但是怎样知道要更新的data_tbl字段在item_tbl中被定义呢?请问怎么判断——或者说代码怎么写?
tomhuang 2004-09-30
  • 打赏
  • 举报
回复
对inserted表中的字段与deleted表中的相同字段进行比较,如发现内容不一致的就写到history_tbl中,不难啊...
holy_phoenix 2004-09-30
  • 打赏
  • 举报
回复
谢谢bzszp(SongZip)。

第一帖中的数据库表的结构有所错误,在第四帖中做了修正。
holy_phoenix 2004-09-30
  • 打赏
  • 举报
回复
在item_tbl中定义了一个字段专门记录要对那些data_tbl中的字段的更新动作进行跟踪。
如上面的例子,item_tbl有一条记录:time,就是说要对data_tbl中time字段的变化进行记录。

PS.修正一下item_tbl
item_tbl
------------
item_id
在item_id中有一个数据:time。
bzszp 2004-09-30
  • 打赏
  • 举报
回复
create or replace trigger trg_data_tbl
before update on data_tbl
for each row
begin
if :old.time=:new.time then
insert into history_tbl values ...;
end if;
end trg_data_tbl;
/

但是怎样知道要更新的data_tbl字段在item_tbl中被定义呢?
什么意思?

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧