이제 룰을 만들 차례인데 총 4개의 룰을 만들어야 한다.
입력
BEGIN
-- 최초 STEP1을 시작시키는 룰
DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
chain_name => 'MY_CHAIN1',
condition => 'TRUE',
action => 'START STEP1',
rule_name => 'MY_RULE1',
comments => 'START 룰' );
END;
결과
익명 블록이 완료되었습니다.
총 4개 중 먼저 제일 처음에 시작되는 룰1을 만들었다. 최초에는 무조건 실행되어야 하므로 condition 매개변수로는 TRUE를, action 매개변수는 ‘START STEP1’ 형식으로 값을 넘겼다. 이는 STEP1을 실행하라는 의미다. 그럼 두 번째 룰을 만들어보자.
입력
BEGIN
-- 두 번째 룰, 일주일간 변경된 객체가 없다면 종료로 빠진다
-- 이는 STEP1을 실행해 그 결과로 오류 코드를 받았을 때 종료하도록 처리한다
DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
chain_name => 'MY_CHAIN1',
condition => 'STEP1 ERROR_CODE = 20001',
action => 'END',
rule_name => 'MY_RULE2',
comments => '룰2' );
END;
결과
익명 블록이 완료되었습니다.
룰2의 조건(condition)은 에러코드(ERROR_CODE)가 20001이면 종료(action=> END)하라는 규칙이다. 이는 MY_CHAIN_PROG1 프로그램 객체가 가리키는 프로시저인 ch15_check_objects_prc에서 일주일 간 변경된 객체가 없을 때 RAISE_APPLICATION_ERROR 프로시저를 호출하여 에러코드 20001을 반환할 경우를 감안한 조건이다. 나머지 룰도 만들어 보자.
입력
BEGIN
-- STEP1에서 STEP2로 가는 룰
DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
chain_name => 'MY_CHAIN1',
condition => 'STEP1 SUCCEEDED',
action => 'START STEP2',
rule_name => 'MY_RULE3',
comments => '룰3' );
-- STEP2를 마치고 종료하는 룰
DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
chain_name => 'MY_CHAIN1',
condition => 'STEP2 SUCCEEDED',
action => 'END',
rule_name => 'MY_RULE4',
comments => '룰4' );
END;
결과
익명 블록이 완료되었습니다.