2013-08-07 4 views
0

프로덕션에서 배포 한 날짜부터 매주 실행해야하는 프로 시저가 있습니다. 배포 당일에 실행해야하고 종료 날짜까지 다음 주에 실행해야하는 프로 시저가 있습니다. 변수에 저장됩니다.오라클에서 매주 프로 시저를 실행하는 방법

내가 가정 시작 날짜를 별도의 스케줄러 또는 DBMS_JOB

을 만드는 대신 프로 시저 수준에서이를 통합해야하는 것은 2013년 11월 1일 (배포 일)과 종료 날짜는 내가 필요로 2014년 4월 30일 입니다 시작일을 포함하여이 기간에 한 번씩 매주 절차를 실행해야합니다.

2014 년 4 월 28 일과 다음 주에 실행되는 proc가 MAY에 있다고 가정하면 2014 년 4 월 30 일까지 매일 실행해야합니다.

도움을 받으실 수 있습니다. (NUMBER_OF_SECONDS를)

BEGIN 

     FOR I IN (SELECT typename ....)-- will give 3 output 
     LOOP 
     IF typename = 'ABC' THEN 
     -- run THE UPDATE every week FROM start date TO END 

      UPDATE TEST 
        SET TEST.A = ...., 
         TEST.b = .... 
        WHERE TEST.c IN (....) 

     ELSIF typename = 'PQR'THEN 
      UPDATE TEST1 
        SET TEST.A1 = ..., 
         TEST.b1 = ..., 
        WHERE test1.c IN (....) 
     END LOOP; 
     END;     
    -- run THE UPDATE every week FROM start date TO END 

    --Note start date and end date is different for different types. 

    --***If the week it ran is less than end date then schedule the update every day from --that week 
    --eg the last day ends at 04/30/2014, , 
--the last run happened on 04/28/2014 then update should run on 4/29,4/30 also 
+3

"나는 프로 시저 수준에서이를 통합해야"에서 해당 절차에 대한 자세한 정보를 볼 수 이것은 무엇을 의미합니까? dbms_scheduler가 금지 된 이유는 무엇입니까? (원하는 작업을 수행하기 위해 생성 된 db 작업을 예약했습니다.) – tbone

+0

proc.with의 다른 종료 날짜에 3 개의 블록이 있으므로 세 명의 스케줄러를 만들어야합니다.이 프로 시저는 다른 프로 시저에서 호출됩니다. 그래서 나는 생각하고있었습니다. 스케줄러가 아닌 프로 시저에서 구현하는 것. –

+0

자주 스케줄러를 사용합니다. 그것의 상황이 무엇인지는 분명하지 않지만 세 가지 별도의 스케줄러 작업 (아마도 체인은 있지만 불분명 함)이 필요합니다. 당신이 시작하려고하는 코드를 게시 할 수 있습니까? – tbone

답변

0

밥 자비스 댓글을 달았 것을 고려,하지만 당신은 여전히 ​​당신의 문제를 해결해야하는 경우, 하나 개의 가능한 솔루션은 dbms_lock.sleep 사용하는 것입니다; , 때문에 기본적인 의사 코드는 다음과 같습니다

  • 일주일
  • 사용 dbms_lock.sleep (NUMBER_OF_SECONDS)에서 초 동안 DML 문
  • 계산 번호를 실행; 프로 시저를 일시 중단하려면
  • 종료 날짜가 SYSDATE보다 작거나 같을 때까지 반복하십시오.

here

관련 문제