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 블록의 시작 부분에 위치해야 한다는 점을 기억하세요.