oracle年改变触发器

时间:2011-04-20 13:42:19

标签: oracle11g c++builder

我遇到了一个我无法弄清楚的问题。我在c ++ builder 2009和oracle 11g中构建应用程序。我有一些依赖于用户年龄的计算数据。我想做的是每年都重新计算这些数据。我以为我可以触发这样做,但我不知道应该抓到哪个事件,而且我没有在互联网上找到什么。

我的表是:

ATHLETE (name, ......, birthdate, Max_heart_frequency)

Max_heart_frequency是取决于年龄的字段。插入时我计算了运动员的年龄,但是明年呢?????? 谁能帮忙????

3 个答案:

答案 0 :(得分:2)

如何计算max_heart_frequence?

如果这是一个简单的公式,我会创建一个返回该信息的视图。无需存储可轻松计算的值:

CREATE VIEW v_athlete
AS 
select name, 
       case  
          -- younger than 20 years
          when (MONTHS_BETWEEN(sysdate, birthday) / 12) < 20 then 180

          -- younger than 40 years
          when (MONTHS_BETWEEN(sysdate, birthday) / 12) < 40 then 160

          -- younger than 60 years
          when (MONTHS_BETWEEN(sysdate, birthday) / 12) < 60 then 140

          -- everyone else
          else 120
       end as max_heart_frequency
from athlete

然后您只需要从视图中进行选择,它始终是准确的。

答案 1 :(得分:0)

您可以使用oracle调度程序以特定的时间间隔运行程序(可以是分钟小时,每天,每年等等。任何时间跨度)。

检查此链接:http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schedover.htm

您有两种选择:

  1. 有一个存储过程,每1月1日(使用程序的年度安排)计算和更新所有运动员的Max_Heart_Frequency

  2. 拥有一个每天运行的存储过程,每天计算并更新所有运动员的Max_Heart_Frequency(使用每日程序安排)

答案 2 :(得分:0)

如果Max_Heart_Frequency因用户年龄的增长而发生变化,为什么首先要将其存储在表格中?为什么不在需要时调用运行时计算最大心率的函数?潜在地,在Athlete表的顶部添加计算Max_Heart_Frequency列以隐藏调用者这是一个计算列可能是有意义的。