예외 캡처 유형 및 처리 방법 정의:
DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement handler_action: CONTINUE | EXIT | UNDO condition_value: mysql_error_code | SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION
여기서 몇 가지 참고할 사항이 있습니다.
a.condition_value [, Condition_value], 이는 여러 상황을 포함할 수 있음을 보여줍니다(대괄호는 선택 사항을 나타냄). 즉, 여러 상황을 대상으로 핸들러를 정의할 수 있음 . 상황에 따라 해당 작업을 수행합니다. 또한, 조건_값에는 위에 나열된 6가지 값이 포함될 수 있습니다.
1. mysql_error_code는 mysql의 에러 코드를 의미하며, mysql 자체적으로 정의한 값이다.
2. SQLSTATE [VALUE] sqlstate_value는 오류 코드와 유사한 5자의 문자열입니다. 핵심은 ANSI SQL, ODBC 등의 표준에서 인용된다는 점입니다. . , 자체적으로 사용하기 위해 mysql에서 완전히 정의한 위의 error_code와 달리 더 표준화되어 있습니다. 이는 첫 번째 것과 유사하며 mysql 데이터베이스 오류 코드 및 정보를 참조할 수도 있습니다.
3. Condition_name은 DECLARE...CONDITION 문을 사용하여 정의한 조건 이름입니다. 자체적으로 Condition_name을 정의하는 방법을 소개하겠습니다.
4. SQLWARNING, 오류: 1311 SQLSTATE: 01000 (ER_SP_UNINIT_VAR)과 같이 SQLTATE의 문자열이 '01'로 시작하는 오류를 나타냅니다.
5. 찾을 수 없음, 오류: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)
와 같이 SQLTATE의 문자열이 '02'로 시작하는 오류를 나타냅니다.
6. SQLSTATE의 문자열이 '00', '01' 또는 '02'로 시작하지 않는 오류를 나타내는 SQLEXCEPTION 여기서 '00'으로 시작하는 SQLSTATE는 실제로 오류가 아닌 성공적인 실행을 나타냅니다. 나머지 두 개는 위의 4번과 5번의 두 가지 상황입니다.
위 6가지 상황은 실제로 두 가지 범주로 나눌 수 있습니다.
첫 번째 유형은 1, 2, 3의 세 가지 방법을 포함하여 지정된 오류 상황을 처리하는 상대적으로 명확한 처리입니다.
다른 유형은 해당 유형의 오류를 처리하는 것으로, 세 가지 방법 4, 5, 6을 포함하여 특정 오류 그룹을 처리하는 것입니다. 이는 조건_값을 도입합니다. 주목해야 할 또 다른 점은 MySQL에는 기본적으로 자체 오류 처리 메커니즘이 있다는 것입니다(즉, 오류 처리 방법(핸들러)을 정의하지 않았습니다).
1. SQL WARNING 및 NOT FOUND를 처리하는 방법은 오류를 무시하고 계속 실행하는 것이므로 커서 예제에서 반복 조건으로 판단된 값에 대해 no_more_products=1 핸들러를 만들지 않으면 루프가 계속해서 켜집니다.
2. SQLEXCEPTION의 경우 기본 처리 방식은 오류 발생 시 종료하는 것입니다.
b.문, 이는 비교적 간단합니다. 특정 조건/오류가 발생하면 실행하려는 문은 SET var = value만큼 간단할 수 있습니다. 복잡한 여러 줄 문일 수도 있습니다. 여러 줄이 있는 경우 BEGIN ..... END를 사용할 수 있습니다. 여기에 문이 포함됩니다(이는 Delphi의 상황과 같습니다. 저장 프로시저도 여러 줄입니다. BEGIN .... END)도 마찬가지입니다.
c, handler_action, 이는 CONTINUE, EXIT, UNDO(계속, 종료 및 취소를 의미함)를 포함하여 위 명령문을 실행한 후 수행하려는 작업을 나타냅니다( Not 현재 지원됩니다). 실제로 위에서 언급한 두 가지 작업이 있는데 CONTINUE는 SQLWARNING 및 NOT FOUND의 기본 처리 방법이고 EXIT는 SQLEXCEPTION의 기본 처리 방법입니다.
또 다른:
condition_name: 명명된 조건
MySQL 오류 코드 또는 SQLSTATE 코드의 가독성이 너무 낮아 명명 조건이 도입되었습니다.
구문:
DECLARE condition_name CONDITION FOR condition_value condition_value: SQLSTATE [VALUE] sqlstate_value | mysql_error_code
용도:
# original DECLARE CONTINUE HANDLER FOR 1216 MySQL_statements; # changed DECLARE foreign_key_error CONDITION FOR 1216; DECLARE CONTINUE HANDLER FOR foreign_key_error MySQL_statements;
예:
CREATE PROCEDURE sp_add_location (in_location VARCHAR(30), in_address1 VARCHAR(30), in_address2 VARCHAR(30), zipcode VARCHAR(10), OUT out_status VARCHAR(30)) BEGIN DECLARE CONTINUE HANDLER FOR 1062 SET out_status='Duplicate Entry'; SET out_status='OK'; INSERT INTO locations (location,address1,address2,zipcode) VALUES (in_location,in_address1,in_address2,zipcode); END;
이상은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되길 바라며, 많은 응원 부탁드립니다.