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

MySQL 함수에서 테이블을 반환하는 방법

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 문을 실행하면 호출 시 해당 결과 집합을 그대로 받아볼 수 있습니다.