表people,有字段id,name,age,sex,company,address等等,想要在before更新触发器中找到哪些字段已经被改变了,形成消息存到notice表中的nt字段中。
本来是这么写的:
if(:new.company is not null and :new.company<>:old.company) then
  ntTemp='公司从'||:old.company||'变成'||:new.company;
end if;
用这种写法,挨个判断每个字段,但是由于字段很多,这样写好像有点蠢,不知道有没有更好的方法。
如果哪位大侠知道,不吝赐教。

解决方案 »

  1.   

    做临时表,吧需要修改的内容保存进去然后在更新之后,再吧数据insert 进去一条,对比将调的差异,不久知道修改了那些了吗?如果你非要在更新之后做,不好意思,咱貌似提供不了什么非常好的解决方案,因为那样折腾和你现在做的基本上没有啥子差别
      

  2.   

    如果用TRIGGER,只能这么写。你的问题属于审计问题还是历史记录问题?不同的问题可以由不同的解决方案。如果NOTICE表会被其它应用使用的话,建议用程序来控制而不是用TRIGGER。
      

  3.   

    对oracle的触发器不是非常了解,MSSQL的话,咱说的那种思路没有任何问题,甚至更简单(咱熟~)