2011-04-20 49 views
0

我對一個我無法解決的問題感興趣。我在C++ builder 2009和oracle 11g中構建應用程序。我有一些計算的數據取決於用戶的年齡。我想要做的是每過一年重新計算這些數據。我想我可以有一個觸發器來做到這一點,但我不知道我應該捕捉哪個事件,而且我沒有在互聯網上找到任何東西。oracle年度更改觸發器

我的表是:

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

Max_heart_frequency是取決於年齡的領域。在插入我計算運動員的年齡,但明年呢? 任何人都可以幫忙嗎?

回答

0

您可以使用oracle調度程序以特定的時間間隔(可以是分鐘小時,每日,每年等任何時間跨度)運行過程。

入住此臨客:http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schedover.htm

你有兩個選擇:

  1. 有計算並更新每隔01st一月所有的運動員的Max_Heart_Frequency(使用過程中每年安排一個存儲過程)

  2. 有一個每天運行的存儲過程,每天計算並更新所有運動員的Max_Heart_Frequency(使用過程的每日調度)

+0

我認爲這是我一直在尋找的解決方案。我會檢查出來......感謝您的幫助! – 2011-04-22 07:08:23

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 

然後,您只需從視圖中進行選擇並始終準確。

+0

這不是那麼簡單的公式,它沒有像這樣正常工作,但謝謝! – 2011-04-22 07:09:09

+0

如果公式不那麼簡單,則將其放入存儲函數中,並從視圖中調用該函數 – 2011-04-22 07:13:54

0

如果Max_Heart_Frequency隨着時間的推移而變化,因爲用戶年齡越來越大,爲什麼你首先將它存儲在表中呢?爲什麼不直接調用計算運行時最大心率的函數呢?潛在地,在Athlete表上添加計算的Max_Heart_Frequency列以隱藏來自調用者的這個計算列是有意義的。

+0

這是一個選項。感謝您的回覆。 – 2011-04-22 07:06:18