반응형
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 사용 방법 및 예시
SQL/MYSQL

[MySQL] DECLARE 사용 방법 및 예시

2024. 12. 16. 09:58
728x90
반응형


`DECLARE` 문은 MySQL에서 저장 프로시저(Stored Procedure) 또는 트리거(Trigger) 안에서 변수(variable), 핸들러(handler), 또는 커서(cursor)를 선언할 때 사용하는 주요 키워드입니다. 이 문법은 명령문의 시작 부분에서만 사용 가능하며, 프로시저 및 트리거의 로직 안에서 변수를 관리하고 조작하기 위해 필수적입니다. 이번에는 `DECLARE` 문법과 함께 기본적인 사용법과 예제를 살펴보겠습니다.



 주요 특징

- 스코프 제한:  
  `DECLARE`로 선언된 변수는 프로시저 또는 BEGIN...END 블록 내부에서만 유효합니다.  
- 초기화 없음:  
  `DECLARE`로 선언된 변수는 초깃값을 가지지 않습니다. 사용하려면 별도의 `SET` 문으로 값을 초기화해야 합니다.  
- 데이터 타입 지정:  
  변수 선언 시 반드시 데이터 타입(e.g., INT, VARCHAR 등)을 지정해야 합니다.  
- 실행 위치 제한:  
  `DECLARE` 문은 BEGIN...END 블록 내의 첫 번째 섹션에서만 작성할 수 있습니다.  
  (다른 SQL문 뒤에 위치할 경우 오류가 발생합니다.)



 사용 예시

1. 기초적인 변수 선언 및 사용  
다음은 숫자형 변수를 선언하고 초기화한 뒤, `SELECT` 문의 결과를 여기에 저장해 활용하는 간단한 예입니다.

DELIMITER //

CREATE PROCEDURE GetUserCount()
BEGIN
    -- 변수 선언
    DECLARE userCount INT;

    -- 변수 초기화
    SET userCount = 0;

    -- 변수에 SELECT 결과 값 저장
    SELECT COUNT() INTO userCount FROM users;

    -- 결과 출력
    SELECT userCount AS TotalUsers;
END;
//

DELIMITER ;

 

설명:  
- `DECLARE userCount INT;`를 사용하여 정수형 변수를 선언했습니다.
- `SET userCount = 0;`로 초깃값을 설정했습니다.
- `SELECT COUNT() INTO userCount`로 쿼리 결과를 변수에 저장했습니다.
- 마지막으로 해당 변수 값을 출력합니다.



2. 다양한 데이터 타입 선언하기  
다른 데이터 타입을 활용한 변수를 선언하고 사용하는 예시입니다.

DELIMITER //

CREATE PROCEDURE UserInfo()
BEGIN
    -- 변수 선언
    DECLARE userId INT;
    DECLARE userName VARCHAR(50);
    DECLARE userEmail VARCHAR(100);

    -- 변수 초기화
    SET userId = 1; -- 예를 들어 userId에 1을 지정합니다.

    -- 특정 ID 값으로 데이터 조회
    SELECT name, email INTO userName, userEmail
    FROM users
    WHERE id = userId;

    -- 결과 출력
    SELECT userName AS UserName, userEmail AS UserEmail;
END;
//

DELIMITER ;


설명:  
- 정수형 변수 `userId`, 문자형 변수 `userName`과 `userEmail`이 선언되었습니다.
- `SELECT ... INTO` 문법을 사용하여 각각의 변수에 데이터베이스 값을 저장합니다.
- 최종적으로 변수의 데이터를 출력했습니다.



3. 조건문과 함께 사용하기  
`DECLARE`로 선언된 변수를 조건문(`IF...ELSE`)과 함께 활용하는 예시입니다.

DELIMITER //

CREATE PROCEDURE CheckUserStatus()
BEGIN
    -- 변수 선언
    DECLARE userStatus VARCHAR(20);
    DECLARE userId INT;

    -- 변수 초기화
    SET userId = 5; -- 예: 특정 사용자 ID 5

    -- 상태 조회
    SELECT status INTO userStatus
    FROM users
    WHERE id = userId;

    -- 조건문 사용
    IF userStatus = 'active' THEN
        SELECT 'User is active' AS StatusMessage;
    ELSE
        SELECT 'User is not active' AS StatusMessage;
    END IF;    
END;
//

DELIMITER ;


설명:  
- `userStatus`라는 문자열 변수를 선언해 사용자의 상태를 저장했습니다.
- `IF` 조건문을 사용해 상태를 확인하고 동적으로 메시지를 출력했습니다.



 주의점  
- `DECLARE`는 BEGIN...END 블록에서 반드시 상단에 위치해야 함:  
  아래와 같은 코드는 실행 시 오류를 발생시킵니다.  
 

BEGIN
      SELECT NOW() INTO currentTime; -- 오류: DECLARE 전에 다른 SQL 실행 불가!
      DECLARE currentTime DATETIME;
END;

   
  변수 선언은 항상 SQL 선언 순서의 맨 첫 부분에 작성해야 합니다.
  
- 초기값은 자동 할당되지 않음:  
  변수를 선언 후 초기화 없이 사용하면, 값이 없으므로 오류를 반환할 수 있습니다.  

  DECLARE total INT;
  SET total = NULL; -- 명시적 초기화 필요

   

- 지정된 데이터 유형 확인:  
  잘못된 데이터 유형을 사용하거나 길이를 초과하는 값이 할당되면 오류가 발생할 수 있습니다.



 결론  
MySQL의 `DECLARE` 문은 저장 프로시저나 트리거 내에서 데이터 흐름을 제어하고 데이터를 관리하는 중요한 도구입니다. 그 특성과 제한을 올바로 이해하면 효율적이고 유연한 데이터베이스 프로세스를 설계할 수 있습니다. 특히 변수 선언 규칙에 주의하며 데이터를 초기화하고 사용하는 것이 중요합니다. 이를 잘 활용하여 복잡한 로직도 효과적으로 처리해보세요!

 참고 자료  
- MySQL 공식 문서: [https://dev.mysql.com/doc/refman/8.0/en/declare-local-variable.html](https://dev.mysql.com/doc/refman/8.0/en/declare-local-variable.html) 
- MySQL 데이터베이스 실용 예제: [ https://www.mysqltutorial.org/](https://www.mysqltutorial.org/)

728x90
반응형

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

[MySQL] IF 문 사용 방법 및 예시  (0) 2024.12.23
[MySQL] CASE 문 사용 방법 및 예시  (1) 2024.12.20
[MySQL] Local Variable 사용 방법 및 예시  (0) 2024.12.19
[MySQL] Local Variable DECLARE 사용 방법 및 예시  (0) 2024.12.17
[MySQL] Statement Labels 사용 방법 및 예시  (0) 2024.12.12
[MySQL] BEGIN END 사용 방법 및 예시  (0) 2024.12.11
[MySQL] DEALLOCATE PREPARE 사용 방법 및 예시  (0) 2024.12.10
[MySQL] EXECUTE 사용 방법 및 예시  (1) 2024.12.10
    'SQL/MYSQL' 카테고리의 다른 글
    • [MySQL] Local Variable 사용 방법 및 예시
    • [MySQL] Local Variable DECLARE 사용 방법 및 예시
    • [MySQL] Statement Labels 사용 방법 및 예시
    • [MySQL] BEGIN END 사용 방법 및 예시
    Ant_U
    Ant_U

    티스토리툴바