더북(TheBook)

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

결과

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