MySQL의 함수(Function)는 테이블을 반환할 수 없습니다. MySQL 함수는 문자열(string), 정수(integer), 문자(char) 등 스칼라 값만 반환할 수 있습니다. 따라서 테이블 형태의 결과 집합(ResultSet)을 반환하려면 함수가 아닌 저장 프로시저(Stored Procedure)를 사용해야 합니다.
예제 테이블 생성하기
먼저 예제로 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable696 ( Id int, Name varchar(100) ); Query OK, 0 rows affected (0.77 sec)
데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable696 values(100,'Mike'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable696 values(101,'Sam'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable696 values(102,'Adam'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable696 values(103,'Carol'); Query OK, 1 row affected (0.20 sec)
데이터 조회
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable696;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+-------+ | Id | Name | +------+-------+ | 100 | Mike | | 101 | Sam | | 102 | Adam | | 103 | Carol | +------+-------+ 4 rows in set (0.00 sec)
저장 프로시저로 결과 집합 반환하기
MySQL에서 테이블 형태의 결과를 반환하려면 다음과 같이 저장 프로시저를 작성합니다.
mysql> DELIMITER // mysql> CREATE PROCEDURE getResultSet(studId int ) BEGIN select *from DemoTable696 where Id=studId; END // Query OK, 0 rows affected (0.14 sec) mysql> DELIMITER ;
위 프로시저는 매개변수로 전달받은 학생 ID(studId)에 해당하는 레코드만 조회하여 결과 집합으로 반환합니다.
저장 프로시저 호출
CALL 명령을 사용하여 저장 프로시저를 호출할 수 있습니다.
mysql> call getResultSet(103);
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 103 | Carol | +------+-------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
정리
MySQL 함수는 스칼라 값만 반환 가능하며, 테이블(결과 집합)을 반환해야 하는 경우에는 반드시 저장 프로시저를 사용해야 합니다. 저장 프로시저 내부에서 SELECT 문을 실행하면 호출 시 해당 결과 집합을 그대로 받아볼 수 있습니다.