또한 다음과 같이 좀더 복잡한 주기로도 설정할 수 있다.
• 매주 일요일 오후 3시마다 수행: NEXT_DAY(TRUNC(SYSDATE),‘일요일’) + 15/24
• 매주 수요일 오후 11시마다 수행: NEXT_DAY(TRUNC(SYSDATE),‘수요일’) + 23/24
• 매월 마지막 날 오후 6시 30분에 수행: LAST_DAY(TRUNC(SYSDATE)) + 18/24 + 30/60/24
job 매개변수는 SUBMIT 프로시저를 호출해 잡이 등록되는 순간 오라클이 자동으로 잡 번호를 생성해 job 매개변수에 할당한다. instance와 force 매개변수는 인스턴스와 관련된 설정 값으로 일반적으로 생략, 즉 디폴트 값을 사용된다. 그럼 실제로 SUBMIT 프로시저를 호출해 잡을 등록해 보자.
입력
DECLARE
v_job_no NUMBER;
BEGIN
-- 현재 시간 기준 1분에 1번씩 ch15_job_test_proc 프로시저를 실행하는 잡 등록
DBMS_JOB.SUBMIT ( job => v_job_no,
what => 'ch15_job_test_proc;',
next_date => SYSDATE,
interval => 'SYSDATE + 1/60/24' ); -- 현재 시간 기준 1분에 1번
COMMIT;
-- 시스템에서 자동 생성된 잡 번호 출력
DBMS_OUTPUT.PUT_LINE('v_job_no : ' || v_job_no);
END;
결과
v_job_no :30
결과를 보면 성공적으로 잡이 등록되었고 오라클에서 자동 생성된 잡 번호는 30번이다(잡 번호는 시스템에서 자동 생성하므로 SUBMIT 프로시저를 실행할 때마다 채번되는 번호는 다르다는 점을 알아 두자)임을 알 수 있다. 그럼 제대로 잡이 실행되는지 확인해야 하는데, 확인하는 방법은 2가지가 있다. 첫 번째는 ch15_job_test_proc 프로시저가 데이터를 생성하는 ch15_job_test 테이블을 조회해 보는 것이고, USER_JOBS (ALL_JOBS, DBA_JOBS) 시스템 뷰를 조회하는 것이 두 번째 방법이다.
입력
SELECT SEQ, TO_CHAR(INSERT_DATE, 'YYYY-MM-DD HH24:MI:SS')
FROM ch15_job_test;
결과
SEQ TO_CHAR(INSERT_DATE,'YYYY-MM-DDHH24:MI:SS')
----- ------------------------------------------------
1 2014-07-14 22:35:40
2 2014-07-14 22:36:40
3 2014-07-14 22:37:40
4 2014-07-14 22:38:40
5 2014-07-14 22:39:40
위 결과를 보면 22시 35분 40초에 시작되어 1분 간격으로 데이터가 입력된 것을 확인할 수 있다. 즉 30번 잡이 ch15_job_test_proc 프로시저를 1분마다 실행해 데이터가 입력된 것이다.