ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SP] Handler 정의 문장
    MySQL_Section/운영 2014. 11. 18. 17:00

    예제로 간단한 Handler 정의 문장을 살펴보자.

    예제 1)
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION   SET error_flag=1;

    SQLException (Sql State "00", "01", "02" 이외의 값으로 시작되는 에러)이 발생했을 때, error_flag 변수의 값을 1로 설정하고마지막 실행했던 Stored routine의 코드로 돌아가서 계속 실행(CONTINUE)

    예제 2)
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN
          ROLLBACK;
          SELECT 'Error occurred - terminating';
      END;

    SQLException (Sql State "00", "01", "02" 이외의 값으로 시작되는 에러)이 발생했을 때, ROLLBACK을 실행하고, SELECT ... 문장을 실행 후이 Handler가 실행된 코드 블록을 벗어나거나 Handler 가 Stored routine의 최상위 블록에 정의된 경우에는 실행을 종료한다.
    Stored routine에서 실행되는 SELECT 문장의 결과를 Console이나 Client로 즉시 출력된다.
    (이 예제에서는 " Error occurred - terminating "라는 값이 출력된다.)

    예제 3)
    DECLARE CONTINUE HANDER FOR 1062   SELECT 'Duplicate key in index';

    MySQL ErrorNo 1062인 이벤트가 발생했을 때, Console이나 Client에 "Duplicate key in index"라는 결과 셋을 출력하고, Stored routine의 원래 실행 지점으로 돌아가서 계속 나머지 코드를 실행한다.

    예제 4)
    DECLARE CONTINUE HANDER FOR SQLSTATE '23000'   SELECT 'Duplicate key in index';

    MySQL SqlState가 "23000"인 이벤트가 발생했을 때, Console이나 Client에 "Duplicate key in index"라는 결과 셋을 출력하고, Stored routine의 원래 실행 지점으로 돌아가서 계속 나머지 코드를 실행한다.

    예제 5)
    DECLARE CONTINUE HANDLER FOR NOT FOUND   SET process_done=1;

    SELECT 문의 실행 결과 레코드 건이 없거나, CURSOR의 결과 레코드를 모두 Fetch하고 나면 process_done 변수 값을 1로 설정하고 Stored routine의 마지막 실행 지점으로 돌아가서 계속 나머지 코드를 실행한다.

    예제 6)
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'   SET process_done=1;

    SELECT 문의 실행 결과 레코드 건이 없거나, CURSOR의 결과 레코드를 모두 Fetch하고 나면 process_done 변수 값을 1로 설정하고 Stored routine의 마지막 실행 지점으로 돌아가서 계속 나머지 코드를 실행한다. ("02000" NOT FOUND를 의미하는 SQLSTATE값이다.)

    예제 7)
    DECLARE CONTINUE HANDLER FOR 1329   SET process_done=1;

    SELECT 문의 실행 결과 레코드 건이 없거나, CURSOR의 결과 레코드를 모두 Fetch하고 나면 process_done 변수 값을 1로 설정하고 Stored routine의 마지막 실행 지점으로 돌아가서 계속 나머지 코드를 실행한다. (1329 NOT FOUND를 의미하는 MySQL ErrorNo값이다.)

    예제 8)
    DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION
      BEGIN
        ROLLBACK;
        SELECT 'Process terminated, Because error';
        SHOW ERRORS;
        SHOW WARNINGS;
      END;

    SQLWARNING 이나 SQLEXCEPTION이 발생하면지금까지의 데이터 변경을 모두 ROLLBACK하고에러와 경고 메시지를 출력하고 Stored routine을 종료한다.



    -------------------------------------------------------------------------------------------



Designed by Tistory.