触发器修改自身的情况

cer 2005-12-27 02:20:27
情况如下:
A表字段a1,a2
a2是根据a1通过某一费时的算法得到

我现在希望有很快的insert速度,
所以在insert之后(after)起别一个过程来生成a2,
将a2更新到A

但现在出现的情况是:
我写了一个insert的after触发器来update但老是出错

我的问题是可以用触发器完成上面的功能吗?
如果能怎样处理?
如果不能有没有更好的办法?
...全文
263 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
swimming8243 2005-12-28
  • 打赏
  • 举报
回复
insert-after的update,难道不能放到insert-before里将:new直接换调?
cer 2005-12-28
  • 打赏
  • 举报
回复
采用了: libin_ftsafe(子陌红尘) 的办法
hevin 2005-12-28
  • 打赏
  • 举报
回复
就是这个原因了,参见楼上。
bobfang 2005-12-28
  • 打赏
  • 举报
回复
行级触发器(for each row)中不允许访问触发的表中的其他的行,但可以通过:NEW.或:OLD.来访问触发的行。
既然"a2是根据a1通过某一费时的算法得到",那么在触发器中计算a2不太妥当,因为触发器没有执行完前,引起触发的语句也不会结束的。还是按libin_ftsafe(子陌红尘)所建议的那样,用JOB来实现,除非业务要求必须要在更新a1后立即更新a2。不过即使要同时更新a2,也最好不在触发器中实现,改为用存储过程来实现写入a1和a2。
cer 2005-12-28
  • 打赏
  • 举报
回复
错误不怎么明确,后来我看书,上面说,在insert的after处不能update自身
hevin 2005-12-27
  • 打赏
  • 举报
回复
你的触发器出什么错?
cer 2005-12-27
  • 打赏
  • 举报
回复
我原来是这样想的...
我计划每天23:50做这个计算
但是由于数据量很大是10万级每天的,那么,会要很久的时间
子陌红尘 2005-12-27
  • 打赏
  • 举报
回复
如果这个字段的计算比较的费时,而该字段实时性要求不高,不妨不要每条记录执行插入之后都通过触发器来更新,封装一个存储过程,用于更新该字段为空的记录,使用JOB定时批量执行。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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