반응형
Ant_U
DBA 개미
Ant_U
전체 방문자
오늘
어제
  • 분류 전체보기 (262)
    • AWS (3)
    • C# (1)
    • SQL (236)
      • MYSQL (186)
      • MSSQL (50)
    • 자격증 (20)
      • SQLD (12)
      • SQLP (8)

인기 글

최근 글

250x250
hELLO · Designed By 정상우.
Ant_U

DBA 개미

[MySQL] DECLARE CONDITION 문 사용 방법 및 예시
SQL/MYSQL

[MySQL] DECLARE CONDITION 문 사용 방법 및 예시

2025. 1. 6. 09:54
728x90
반응형

 

소개

MySQL에서 DECLARE ... CONDITION 문은 저장 프로시저나 함수에서 특정한 조건(주로 에러 코드나 상황)에 이름을 붙이기 위해 사용됩니다. 쿼리 처리 중 특정 상황(예: 에러 코드)을 감지하고 이를 처리하도록 설계할 때 유용합니다. 이 문은 조건 처리 핸들러(DECLARE HANDLER)와 함께 사용되는 경우가 많습니다. 이를 통해 코드를 더 읽기 쉽게 하고 유지보수를 용이하게 할 수 있습니다.

이 포스트에서는 DECLARE ... CONDITION 문법과 사용법, 그리고 간단한 예제를 자세히 다룰 것입니다.



주요 특징

- 처리를 위해 특정 에러 코드나 SQL 상태에 이름을 부여할 수 있음.
- SQLSTATE 또는 MySQL 에러 코드 기반으로 조건을 정의.
- 명시적 정의를 통해 코드의 가독성과 유지보수성을 향상.
- 주로 조건 처리 핸들러(DECLARE HANDLER)에서 사용.



문법

DECLARE condition_name CONDITION 
FOR {SQLSTATE [VALUE] sqlstate_value | mysql_error_code};


파라미터 설명
- condition_name: 조건의 이름을 정의합니다. 이 이름으로 특정 상황을 참조할 수 있습니다.
- SQLSTATE [VALUE] sqlstate_value: SQLSTATE 값(5자 문자열)로 조건을 정의합니다.
- mysql_error_code: MySQL 기본 제공 에러 코드로 조건을 정의합니다.



사용 예시

다음은 DECLARE ... CONDITION을 사용하여 특정 에러 상태를 정의한 후, 핸들러에서 이를 활용하는 간단한 예제입니다.

예제 1: SQLSTATE 코드를 활용한 조건 정의

DELIMITER $$

CREATE PROCEDURE example_procedure()
BEGIN
    DECLARE my_condition CONDITION FOR SQLSTATE '45000'; -- 사용자 정의 에러 코드
    DECLARE EXIT HANDLER FOR my_condition
    BEGIN
        -- 에러 처리 로직
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error encountered.';
    END;

    -- 실제 프로시저 로직
    IF 1 = 1 THEN -- 특정 조건이 만족되면 에러 트리거
        RESIGNAL my_condition;
    END IF;
END$$

DELIMITER ;


- 위 코드는 SQLSTATE '45000'이라는 사용자 지정 에러 코드에 my_condition이라는 이름을 부여합니다.
- 조건이 만족되면 my_condition을 트리거하여 에러를 발생시키고 해당 핸들러에서 처리합니다.



예제 2: MySQL 에러 코드를 활용한 조건 정의

DELIMITER $$

CREATE PROCEDURE another_example_procedure()
BEGIN
    DECLARE duplicate_key_condition CONDITION FOR 1062; -- MySQL 에러 코드: Duplicate key 에러
    DECLARE CONTINUE HANDLER FOR duplicate_key_condition
    BEGIN
        -- 에러 처리: 중복 키가 발생해도 실행을 계속하도록 설정
        SET @error_message = 'Duplicate key error handled.';
    END;

    -- 프로시저 주요 로직
    INSERT INTO my_table (id, name) VALUES (1, 'Sample'); -- 중복 키가 발생하는 쿼리
END$$

DELIMITER ;


- 1062는 MySQL에서 '중복 키' 에러를 의미합니다.
- 핸들러를 통해 중복 키 에러가 발생해도 프로시저가 종료되지 않고 실행을 계속합니다.



장단점 분석

장점
- 가독성 향상: 조건 이름을 사용하여 SQLSTATE 값이나 에러 코드를 직접 참조하지 않아도 되므로 가독성이 높아짐.
- 유지보수 용이: 에러 코드나 상태를 에러 이름으로 매핑하면 이후 유지보수가 더 쉬워짐.
- 핸들링 효율화: 조건별 핸들러를 통해 보다 명확하고 안전하게 에러 처리가 가능.

단점
- 제한적 활용: DECLARE ... CONDITION은 블록 레벨 내에서만 사용 가능, 즉 프로시저나 함수 외부에서는 사용할 수 없음.
- 에러 핸들러 복잡성: 복잡한 로직일 경우 핸들러 코드가 많아질 수 있음.



결론

MySQL의 DECLARE ... CONDITION 문은 저장 프로시저나 함수에서 직관적이고 체계적인 에러 처리를 가능하게 합니다. SQLSTATE 코드나 MySQL 에러 코드를 보기 좋은 조건명으로 정의함으로써 SQL 스크립트의 가독성과 유지보수성을 크게 높일 수 있습니다. 에러 트리거와 조건 핸들러를 적절히 결합하면 데이터 무결성을 보장하고 다양한 오류 상황에 안전하게 대처할 수 있습니다.



참고 자료

- [MySQL 공식 문서: DECLARE Syntax](https://dev.mysql.com/doc/refman/8.0/en/declare.html)
- [MySQL 공식 문서: Error Handling Example](https://dev.mysql.com/doc/refman/8.0/en/condition-handling.html)

728x90
반응형

'SQL > MYSQL' 카테고리의 다른 글

[MySQL] SIGNAL 문 사용 방법 및 예시  (0) 2025.01.14
[MySQL] RESIGNAL 문 사용 방법 및 예시  (0) 2025.01.13
[MySQL] GET DIAGNOSTICS 문 사용 방법 및 예시  (0) 2025.01.07
[MySQL] DECLARE HANDLER 문 사용 방법 및 예시  (0) 2025.01.06
[MySQL] 서버 사이드 커서 문 사용 방법 및 예시  (0) 2025.01.04
[MySQL] Cursor Open 문 사용 방법 및 예시  (1) 2025.01.03
[MySQL] Cursor FETCH 문 사용 방법 및 예시  (0) 2024.12.31
[MySQL] Cursor DECLARE 문 사용 방법 및 예시시  (0) 2024.12.30
    'SQL/MYSQL' 카테고리의 다른 글
    • [MySQL] GET DIAGNOSTICS 문 사용 방법 및 예시
    • [MySQL] DECLARE HANDLER 문 사용 방법 및 예시
    • [MySQL] 서버 사이드 커서 문 사용 방법 및 예시
    • [MySQL] Cursor Open 문 사용 방법 및 예시
    Ant_U
    Ant_U

    티스토리툴바