2011-04-20 2 views
0

알아낼 수없는 문제가 있습니다. 저는 C++ 빌더 2009 및 오라클 11g에서 응용 프로그램을 작성합니다. 사용자 연령에 따라 계산 된 데이터가 있습니다. 내가하고 싶은 일은 새해마다 이러한 데이터를 다시 계산하는 것입니다. 나는 이것을 할 수있는 방아쇠를 가질 수 있다고 생각했지만, 나는 어떤 이벤트를 잡아야하는지 알지 못하고 인터넷에서 뭔가를 찾지 못했습니다.oracle year change trigger

내 테이블은 다음과 같습니다

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

Max_heart_frequency 나이에 따라 달라 필드입니다. 삽입 할 때 운동 선수의 나이를 계산하지만 내년은 어떨까요? 아무도 도와 줄 수 있습니까 ????

답변

0

오라클 스케줄러를 사용하여 특정 간격 (몇 시간, 일일, 연간 등)으로 프로 시저를 실행할 수 있습니다.

확인이 LINKE : http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schedover.htm

당신은 두 가지 옵션이 있습니다

  1. 계산 절차의 연간 일정을 사용 (모든 선수 각 01 번째 월의 Max_Heart_Frequency을 업데이트하는 저장 프로 시저를 가지고)

  2. 매일 실행되는 저장 프로 시저를 가지며 매일 모든 프로 시저의 Max_Heart_Frequency를 계산하고 업데이트합니다 (프로 시저의 일일 스케줄링 사용)

+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 

그런 다음보기에서 선택하면되며 항상 정확한 값을 저장할 수 있습니다.

+0

그 간단한 수식은 아니지만, 이처럼 올바르게 작동하지는 않지만 감사합니다! –

+0

수식이 그렇게 단순하지 않은 경우 저장 함수에 넣고보기에서 해당 함수를 호출하십시오. –

0

사용자가 나이가 들어서 시간이 경과함에 따라 Max_Heart_Frequency이 변경되면 왜 처음에 테이블에 저장합니까? 왜 값을 필요로 할 때 실행시 최대 심박수를 계산하는 함수를 호출하지 않는가? 잠재적으로 계산 된 Max_Heart_Frequency 열을 추가하는 Athlete 테이블 위에보기를 사용하면 계산자 열이 숨겨진 것으로 호출자에게 표시되지 않도록 할 수 있습니다.

+0

옵션입니다. 답장을 보내 주셔서 감사합니다. –