함수(function)는 결과값을 반환해야 하는 경우에 가장 적합하게 사용됩니다. 따라서 값의 삽입(INSERT)이나 업데이트(UPDATE)처럼 테이블을 조작하기 위한 저장 함수(stored function)를 생성하면, 그 동작 방식이 저장 프로시저(stored procedure)와 상당히 유사해집니다.
다만 일반적인 저장 프로시저와 달리, 저장 함수는 반드시 RETURNS 절로 반환 타입을 명시하고 RETURN 문으로 값을 반환해야 한다는 점이 특징입니다.
예제: student_marks 테이블에 데이터 삽입하기
다음 예제에서는 'student_marks' 테이블에 학생 이름과 네 과목 점수를 삽입하는 'tbl_insert'라는 이름의 저장 함수를 생성합니다. 이 함수는 다섯 개의 매개변수(학생 이름, 수학, 영어, 과학, 역사 점수)를 받아 테이블에 레코드를 추가한 후, 성공을 의미하는 정수 1을 반환합니다.
mysql> Create Function tbl_insert(S_name Varchar(50),M1 INT,M2 INT,M3 INT,M4 INT)
-> RETURNS INT
-> DETERMINISTIC
-> BEGIN
-> INSERT INTO student_marks values(S_name,M1,M2,M3,M4);
-> RETURN 1;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> Select tbl_insert('Saurabh',85,79,65,71);
+------------------------------+
| tbl_insert('RR',58,25,65,32) |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.07 sec)
mysql> Select * from student_marks;
+---------+------+---------+---------+---------+
| Name | Math | English | Science | History |
+---------+------+---------+---------+---------+
| Raman | 95 | 89 | 85 | 81 |
| Rahul | 90 | 87 | 86 | 81 |
| Mohit | 90 | NULL | 86 | 81 |
| Saurabh | 85 | 79 | 65 | 71 |
+---------+------+---------+---------+---------+
4 rows in set (0.00 sec)코드 설명
- Create Function: 'tbl_insert'라는 저장 함수를 생성하며, 학생 이름(VARCHAR)과 네 과목 점수(INT) 총 5개의 매개변수를 받습니다.
- RETURNS INT: 함수가 정수형 값을 반환한다고 선언합니다. 저장 함수에서는 이 절이 필수입니다.
- DETERMINISTIC: 같은 입력값에 대해 항상 같은 결과를 낸다는 의미로, 바이너리 로깅이 활성화된 환경에서 함수 생성 시 필요할 수 있습니다.
- BEGIN ... END: 함수 본문으로, INSERT 문으로 데이터를 삽입한 뒤 RETURN 1로 성공 여부를 반환합니다.
실행 결과 확인
함수를 SELECT 문으로 호출하면 'Saurabh' 학생의 성적이 student_marks 테이블에 정상적으로 삽입되었으며, 함수는 값 1을 반환합니다. 마지막에 전체 테이블을 조회하면 새로 추가된 행을 확인할 수 있습니다.