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

MySQL 저장 프로시저에서 컬럼 값을 변수에 저장하는 방법 (SELECT INTO 활용)

개요

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 구문을 사용해 쿼리 결과의 컬럼 값을 손쉽게 변수에 저장할 수 있습니다. 이 기법은 단일 값을 조회해 비즈니스 로직에 활용하거나, 여러 변수에 값을 담아 복잡한 처리를 수행할 때 매우 유용하게 사용됩니다.