이제 룰을 만들 차례인데 총 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;
    

    결과

        익명 블록이 완료되었습니다.
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.