개요
MySQL 저장 프로시저 내에서 변수를 선언하려면 DECLARE 문을 사용합니다. 그리고 조회한 컬럼 값을 해당 변수에 저장할 때는 SELECT ... INTO 구문을 활용하면 됩니다.
이 글에서는 예제 테이블을 만들고, 저장 프로시저 안에서 특정 컬럼의 값을 변수에 담아 활용하는 전체 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable2034
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentAge int
-> );
Query OK, 0 rows affected (0.49 sec)
학생 ID는 자동 증가(AUTO_INCREMENT) 기본 키로 설정하고, 이름과 나이 컬럼을 함께 정의했습니다.
2단계: 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable2034(StudentName,StudentAge) values('Chris',23);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable2034(StudentName,StudentAge) values('David',21);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2034(StudentName,StudentAge) values('Robert',25);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2034(StudentName,StudentAge) values('Mike',19);
Query OK, 1 row affected (0.14 sec)3단계: 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable2034;
실행 결과는 다음과 같습니다.
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1 | Chris | 23 |
| 2 | David | 21 |
| 3 | Robert | 25 |
| 4 | Mike | 19 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)
4단계: 저장 프로시저 생성 및 변수에 값 저장
이제 핵심 부분입니다. 아래 쿼리는 저장 프로시저를 생성하고, SELECT ... INTO 구문으로 테이블의 컬럼 값을 프로시저 변수에 저장하는 예제입니다.
mysql> delimiter //
mysql> create procedure select_into_variable(id int)
-> begin
-> declare name varchar(50);
-> select StudentName into name from DemoTable2034 where StudentId=id;
-> select concat('Your Name is= ',name);
-> end
-> //
Query OK, 0 rows affected (0.09 sec)
mysql> delimiter ;
위 프로시저의 동작 방식을 정리하면 다음과 같습니다.
- delimiter //: 프로시저 본문에 포함된 세미콜론(;)이 일반 문장 종결자로 해석되지 않도록 구분 기호를 변경합니다.
- declare name varchar(50);: 프로시저 내부에서 사용할 변수를 선언합니다. DECLARE는 반드시 BEGIN 바로 뒤에 위치해야 합니다.
- select StudentName into name ...: 조건에 맞는 행의 StudentName 값을 name 변수에 저장합니다.
- concat(...): 변수에 저장된 값을 문자열과 결합하여 결과로 출력합니다.
5단계: 저장 프로시저 호출
CALL 명령어로 프로시저를 실행합니다. 여기서는 StudentId가 4인 학생(Mike)을 조회해 보겠습니다.
mysql> call select_into_variable(4);
실행 결과는 다음과 같습니다.
+-------------------------------+
| concat('Your Name is= ',name) |
+-------------------------------+
| Your Name is= Mike |
+-------------------------------+
1 row in set (0.04 sec)
Query OK, 0 rows affected (0.06 sec)
마무리
이처럼 MySQL 저장 프로시저에서는 DECLARE로 변수를 선언하고, SELECT ... INTO 구문을 사용해 쿼리 결과의 컬럼 값을 손쉽게 변수에 저장할 수 있습니다. 이 기법은 단일 값을 조회해 비즈니스 로직에 활용하거나, 여러 변수에 값을 담아 복잡한 처리를 수행할 때 매우 유용하게 사용됩니다.