MySQL에서 저장 프로시저(Stored Procedure)를 활용하면 반복적으로 사용하는 쿼리 로직을 데이터베이스 안에 미리 정의해 두고, 필요할 때마다 간단하게 호출할 수 있습니다. 이번 글에서는 테이블을 생성하고 데이터를 삽입한 뒤, LIMIT 절을 이용해 지정한 개수만큼의 레코드만 반환하는 저장 프로시저를 만드는 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 클라이언트 ID와 이름을 저장하는 간단한 구조입니다.
mysql> create table DemoTable1368
-> (
-> ClientId int,
-> ClientName varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
2단계: 샘플 데이터 삽입하기
INSERT 명령어를 사용해 여러 개의 레코드를 테이블에 추가합니다.
mysql> insert into DemoTable1368 values(101,'Adam'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable1368 values(102,'Bob'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1368 values(103,'John'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1368 values(104,'Sam'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable1368 values(105,'Mike'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable1368 values(106,'Carol'); Query OK, 1 row affected (0.11 sec)
3단계: 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1368;
실행 결과는 다음과 같습니다.
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 101 | Adam | | 102 | Bob | | 103 | John | | 104 | Sam | | 105 | Mike | | 106 | Carol | +----------+------------+ 6 rows in set (0.00 sec)
현재 총 6개의 레코드가 저장되어 있는 것을 확인할 수 있습니다.
4단계: LIMIT을 적용한 저장 프로시저 생성하기
이제 핵심 단계입니다. LIMIT 절을 사용해 표시할 레코드 수를 제한하는 저장 프로시저를 생성합니다. 프로시저는 입력 매개변수(IN limitValue int)를 받아, 해당 값만큼의 레코드만 반환하도록 작성했습니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE limit_Demo(IN limitValue int)
-> BEGIN
-> DECLARE limValue int;
-> SET limValue = limitValue;
-> SELECT * FROM DemoTable1368 LIMIT limValue;
-> END
-> //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;
주요 포인트:
DELIMITER //: 저장 프로시저 내부의 세미콜론(;)이 일반 SQL 문 종료 기호로 해석되지 않도록 구분자를 임시로 변경합니다.DECLARE limValue int;: 프로시저 내부에서 사용할 지역 변수를 선언합니다.LIMIT limValue: 변수에 담긴 값만큼 결과 행 수를 제한합니다.- 작업이 끝나면
DELIMITER ;로 원래 구분자를 복원해야 합니다.
5단계: 저장 프로시저 호출하기
CALL 명령어로 저장 프로시저를 실행합니다. 여기서는 상위 3개의 레코드만 조회하도록 값 3을 전달해 보겠습니다.
mysql> CALL limit_Demo(3);
실행 결과는 다음과 같습니다.
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 101 | Adam | | 102 | Bob | | 103 | John | +----------+------------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.03 sec)
전체 6개의 레코드 중 처음 3개만 정상적으로 출력된 것을 확인할 수 있습니다. 호출 시 전달하는 숫자를 바꾸면(CALL limit_Demo(5); 등) 원하는 개수만큼 유연하게 결과를 조절할 수 있습니다.
정리
이처럼 MySQL의 저장 프로시저와 LIMIT 절을 함께 사용하면, 페이지네이션이나 목록 미리보기처럼 결과 개수를 동적으로 제어해야 하는 상황에서 매우 유용합니다. 매개변수 하나만 바꿔 재사용할 수 있으므로 코드 중복도 줄일 수 있습니다. 실무에서는 ORDER BY 절과 함께 사용해 어떤 기준으로 상위 N개를 가져올지 명확히 지정하는 것이 좋습니다.