Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저에서 DECLARE 키워드로 변수 선언하는 방법

MySQL 저장 프로시저에서 DECLARE로 변수 생성하기

MySQL에서 저장 프로시저(Stored Procedure) 내부에 지역 변수를 생성하려면 DECLARE 키워드를 사용합니다. 기본 문법은 다음과 같습니다.

DECLARE 변수명 int DEFAULT 기본값;

이처럼 DECLARE 뒤에 변수 이름을 지정하고, 데이터 타입을 명시한 후 DEFAULT 절을 통해 초기값을 설정할 수 있습니다. DEFAULT 절은 생략할 수 있지만, 초기값을 지정해 두면 예기치 않은 NULL 오류를 방지하는 데 도움이 됩니다.

저장 프로시저 생성 예제

실제로 위 문법을 활용하여 저장 프로시저 내부에 변수를 생성하는 예제를 살펴보겠습니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE variable_Demo()
    -> BEGIN
    -> DECLARE lastInsertedId int DEFAULT -1;
    -> select lastInsertedId;
    -> set @providedLastId=10001;
    -> select @providedLastId;
    -> END
    -> //
Query OK, 0 rows affected (0.32 sec)
mysql> DELIMITER ;

위 예제의 핵심 포인트는 다음과 같습니다.

1. DELIMITER 변경: 저장 프로시저 내부에는 여러 개의 세미콜론(;)이 포함되므로, 구분 문자를 //로 임시 변경하여 프로시저 전체가 하나의 문장으로 인식되도록 합니다. 프로시저 생성이 끝나면 반드시 원래 구분자인 세미콜론으로 되돌려야 합니다.

2. DECLARE로 지역 변수 선언: lastInsertedId라는 int 타입의 지역 변수를 선언하고 기본값으로 -1을 설정했습니다. DECLARE는 반드시 BEGIN 블록 바로 아래, 다른 SQL문보다 먼저 위치해야 합니다.

3. @변수와의 차이: @providedLastId처럼 @가 붙은 변수는 사용자 정의 변수(User-defined Variable)로, 세션 전체에서 유효합니다. 반면 DECLARE로 선언한 변수는 해당 프로시저 내부에서만 사용 가능한 지역 변수입니다.

저장 프로시저 호출하기

생성된 저장 프로시저는 CALL 명령어로 호출할 수 있습니다.

mysql> call variable_Demo();

실행 결과

프로시저를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

+----------------+
| lastInsertedId |
+----------------+
|             -1 |
+----------------+
1 row in set (0.00 sec)

+-----------------+
| @providedLastId |
+-----------------+
|           10001 |
+-----------------+
1 row in set (0.02 sec)
Query OK, 0 rows affected (0.04 sec)

결과를 보면 DECLARE로 선언한 lastInsertedId는 DEFAULT 값인 -1이 출력되고, SET으로 값을 할당한 사용자 정의 변수 @providedLastId는 10001이 출력되는 것을 확인할 수 있습니다.

정리

MySQL 저장 프로시저에서 변수를 다룰 때는 용도에 따라 적절한 방식을 선택하는 것이 중요합니다. 프로시저 내부에서만 일시적으로 사용하는 값이라면 DECLARE로 지역 변수를 선언하고, 세션 전반에서 공유해야 하는 값이라면 @가 붙은 사용자 정의 변수를 사용하는 것이 좋습니다. 또한 DECLARE 문은 반드시 BEGIN 블록의 시작 부분에 위치해야 한다는 점을 기억하세요.