728x90

 

✔ 조회

select * from dba_jobs;
select * from user_jobs;

 

✔ 생성

DECLARE
    jobno number;
BEGIN
    DBMS_JOB.SUBMIT(jobno,
        'begin pl_sql; end;',
        sysdate,
        'trunc(sysdate)+1+2/24'
        );
END;

 

[예시]

'begin pl_seql; end;' 내용을 다음과 같이 사용. 
'DELETE FROM 테이블 WHERE 날짜 < ADD_MONTHS(SYSDATE, -6);',
6개월전 데이터를 삭제 하기위한 내용

 

✔ 상태(Broken)

BEGIN
    /* broken된 JOB을 정상 상태로 변경하고, 한 시간 뒤 실행하도록 수정한다. */
    DBMS_JOB.BROKEN(100, false, sysdate + 1/24); 
END; 

BEGIN
    /* JOB을 broken 상태로 변경시키고 ,다음 실행시간 Parameter는 무시된다.. */
    DBMS_JOB.BROKEN(100, true, sysdate + 1/24); 
END;

 

✔ 삭제

EXECUTE DBMS_JOB.REMOVE(잡넘버);

 

✔ 실행

EXECUTE DBMS_JOB.RUN(잡넘버);

 

✔ 수정

BEGIN
    /* job번호가 100인 job을 psm_proc 프러시저 호출로 대체한다. */
    DBMS_JOB.WHAT(100, 'psm_proc(''abc'', 10);'); 
END; 

BEGIN
    /* 10분 후에 실행하도록 변경한다. */
    DBMS_JOB.NEXT_DATE(100, sysdate + 10/24/60); 
END; 

BEGIN
    /* 하루에 한 번씩 실행한다. */
    DBMS_JOB.INTERVAL(100, 'sysdate + 1'); 
END; 


/*job 내용 전부 바꾸고 싶을 때*/
DBMS_JOB.CHANGE
(
    job           IN   BINARY_INTEGER,
    what          IN   VARCHAR2,
    next_date     IN   DATE,
    interval      IN   VARCHAR2,
    instance      IN   BINARY_INTEGER DEFAULT NULL,
    force         IN   BOOLEAN DEFAULT FALSE
);

 

 

✔ 날짜(Interval) 예시

sysdate + 1/24 1시간 간격
sysdate + 1 1일 간격
sysdate + 7 7주일에 한번
truncate(sysdate) +1+1/24 매일 1시
last_day(trunc(sysdate)+1)+23/24 말일 +1일은 다음달 1일
trunc(sysdate, ''D'') + 7 매주 일요일 00시에 작업

 

728x90

+ Recent posts