원본 출처 : http://www.kim-taesuk.com/11



MySQL 저장 프로시져 ( Stored Procedure ) 내에서, 쿼리 에러 발생시,

그 에러에 대한 HANDLER 가 정의되어 있지 않으면, 에러 발생 위치에서 Stored Procedure 가 종료됨.

이 때, 


1) 에러 처리 구문 실행 후, Stored Procedure 종료 하는 방법

2) 에러 처리 구문 실행 후, 다음 쿼리를 계속 실행 하는 방법

3) DECLARE ... HANDLER 구문 분석

4) DECLARE ... HANDLER 구문 특이사항



- 아 래 - 


1) 에러 처리 구문 실행 후, Stored Procedure 종료 하는 방법


DECLARE EXIT HANDLER FOR SQLEXCEPTION

  BEGIN

    -- 여기에 에러 처리 구문 추가!

  END;



2) 에러 처리 구문 실행 후, 다음 쿼리를 계속 실행 하는 방법


DECLARE CONTINUE HANDLER FOR SQLEXCEPTION

  BEGIN

    -- 여기에 에러 처리 구문 추가!

  END;



3) DECLARE ... HANDLER 구문 분석


구문 : DECLARE [handler_action] HANDLER [condition_value] [statement]


[handler_action]

CONTINUE : 계속 진행

EXIT : 중지, 종료


[condition_value]


mysql_error_code : MySQL 에러 코드 ( number 값 )  [참조Server Error Codes and Messages]


SQLSTATE [VALUE] : 

5 자리의 문자로 정의된, SQL 상태값. 

'00' 으로 시작하는 경우 정상. 

SQLSTATE 는 ODBC 에서 정의된 상태값이므로, mysql의 에러 코드와 100% 매칭되지는 않음.

[참조Server Error Codes and Messages]


condition_name : 미리 정의한 조건의 상수값 [참조DECLARE ... CONDITION Syntax]


예) mysql 에러 코드 1051 발생시의 에러 처리

DECLARE CONTINUE HANDLER FOR 1051

  BEGIN

    -- body of handler

  END;


또는 

DECLARE no_such_table CONDITION FOR 1051;

DECLARE CONTINUE HANDLER FOR no_such_table

  BEGIN

    -- body of handler

  END;



SQLWARNING : SQLSTATE 값이 '01' 로 시작하는 경우


NOT FOUND : SQLSTATE 값이 '02' 로 시작하는 경우


SQLEXCEPTION : SQLSTATE 값이 '00', '01', '02' 로 시작하지 않는 경우.


[statement] : 조건 만족시 실행할 구문



4) DECLARE ... HANDLER 구문 특이사항


[statement] 위치에  ITERATE 또는 LEAVE 구문을 사용할 수 없음.



'프로그래밍 > MySQL' 카테고리의 다른 글

이벤트 스케줄러(Event Scheduler)  (1) 2016.06.21
MySql DB 작성해보기  (1) 2016.03.13
MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)  (0) 2016.02.23
MySql 설치하기  (0) 2016.02.21
Auto Increment란  (0) 2016.02.05
MySql 주석을 달자  (0) 2016.02.01
Posted by GENESIS8

댓글을 달아 주세요