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

MySQL에서 동적으로 컬럼 선택하기: PREPARE 문 활용 가이드

MySQL에서 쿼리를 실행할 때 컬럼명이나 테이블명을 미리 정해두지 않고 상황에 따라 유동적으로 지정해야 하는 경우가 있습니다. 이럴 때 PREPARE 문과 EXECUTE 문을 함께 활용하면 동적으로 컬럼을 선택한 쿼리를 실행할 수 있습니다.

핵심 흐름은 다음과 같습니다. 먼저 실행하고자 하는 쿼리를 문자열 형태로 만들어 준비(prepare)한 뒤, 해당 prepared statement를 실행(execute)하는 순서입니다.

예제 테이블 생성하기

먼저 실습에 사용할 테이블을 생성하겠습니다.

mysql> create table DemoTable
(
    EmployeeName varchar(100)
);
Query OK, 0 rows affected (0.77 sec)

샘플 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable values('John Doe');
Query OK, 1 row affected (0.18 sec)

SELECT 문으로 테이블의 모든 데이터를 조회해 보겠습니다.

mysql> select * from DemoTable;

실행 결과는 아래와 같습니다.

+--------------+
| EmployeeName |
+--------------+
| John Doe     |
+--------------+
1 row in set (0.00 sec)

동적으로 컬럼 선택하기

1단계: 동적 쿼리 문자열 만들기

CONCAT 함수를 사용해 SELECT 문을 문자열로 조합한 후, 사용자 변수(@dynamicQuery)에 저장합니다.

mysql> set @dynamicQuery=CONCAT("SELECT ", (SELECT "EmployeeName from DemoTable"));
Query OK, 0 rows affected (0.00 sec)
mysql> select @dynamicQuery;
+---------------------------------------+
| @dynamicQuery                         |
+---------------------------------------+
| SELECT EmployeeName from DemoTable    |
+---------------------------------------+
1 row in set (0.00 sec)

변수에는 완성된 형태의 쿼리인 'SELECT EmployeeName from DemoTable'이 담긴 것을 확인할 수 있습니다.

2단계: PREPARE 문으로 쿼리 준비하기

mysql> prepare myStatement from @dynamicQuery;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

3단계: EXECUTE 문으로 쿼리 실행하기

mysql> execute myStatement;

실행 결과는 아래와 같습니다.

+--------------+
| EmployeeName |
+--------------+
| John Doe     |
+--------------+
1 row in set (0.00 sec)

정리 및 추가 팁

이처럼 MySQL에서는 CONCAT으로 쿼리 문자열을 동적으로 구성하고, PREPARE → EXECUTE 순서로 처리하면 컬럼이나 테이블명을 런타임에 결정할 수 있습니다. 저장 프로시저 내부에서 검색 조건에 따라 조회 대상 컬럼을 바꿔야 할 때 특히 유용합니다.

참고로, 더 이상 필요 없는 prepared statement는 DEALLOCATE PREPARE myStatement;로 명시적으로 해제해 주면 세션 리소스를 깔끔하게 관리할 수 있습니다.