Oracle11g 甲骨文年度变化触发器

Oracle11g 甲骨文年度变化触发器,oracle11g,c++builder,Oracle11g,C++builder,我遇到了一个我无法解决的问题。我在C++ Builder 2009和Oracle 11g中构建了一个应用程序。我有一些根据用户年龄计算的数据。我想做的是每年重新计算这些数据。我想我可以触发这样做,但我不知道我应该抓住哪个事件,我也没有在互联网上找到什么 我的桌子是: ATHLETE (name, ......, birthdate, Max_heart_frequency) 最大心率取决于年龄。我计算了运动员的年龄,但明年呢?????? 有人可以帮忙吗???您可以使用oracle schedu

我遇到了一个我无法解决的问题。我在C++ Builder 2009和Oracle 11g中构建了一个应用程序。我有一些根据用户年龄计算的数据。我想做的是每年重新计算这些数据。我想我可以触发这样做,但我不知道我应该抓住哪个事件,我也没有在互联网上找到什么

我的桌子是:

ATHLETE (name, ......, birthdate, Max_heart_frequency)
最大心率取决于年龄。我计算了运动员的年龄,但明年呢??????
有人可以帮忙吗???

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

检查此链接:

您有两个选择:

  • 有一个存储过程,用于计算和更新所有运动员每1月1日的最大心跳频率(使用过程的年度计划)

  • 有一个每天运行的存储过程,计算并更新所有运动员每天的最大心跳频率(使用过程的每日计划)


  • 如何计算最大心脏频率

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

    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
    
    创建视图v\u
    作为
    选择名称,
    案例
    --20岁以下
    当(系统日期、生日)/12之间的月数小于20时,则为180
    --40岁以下
    当(系统日期、生日)/12之间的月数小于40时,则为160
    --60岁以下
    当(系统日期、生日)/12之间的月数小于60时,则为140
    --其他人
    其他120
    以最大心脏频率结束
    来自运动员
    

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

    如果
    Max\u Heart\u Frequency
    随着时间的推移而变化,因为用户年龄越来越大,那么您首先为什么要将其存储在表中?为什么不在需要最大心率时调用计算最大心率的函数呢?潜在地,在
    运动员
    表的顶部有一个视图,该视图添加计算的
    最大心率
    列,以向呼叫者隐藏这是一个计算列。

    这是一个选项。谢谢你的回复。我想这就是我一直在寻找的解决方案。我会查出来的…谢谢你的帮助!这不是那么简单的公式,它不会像这样正常工作,但谢谢!如果公式不是那么简单,则将其放入存储函数中,并从视图中调用该函数