팩토리얼 계산용 MySQL 저장 프로시저 만들기
MySQL에서는 저장 프로시저(Stored Procedure)를 활용하면 특정 숫자의 팩토리얼(계승)을 손쉽게 계산할 수 있습니다. 아래 쿼리를 사용하면 됩니다.
mysql> Delimiter //
mysql> CREATE PROCEDURE fact(IN x INT)
-> BEGIN
-> DECLARE result INT;
-> DECLARE i INT;
-> SET result = 1;
-> SET i = 1;
-> WHILE i <= x DO
-> SET result = result * i;
-> SET i = i + 1;
-> END WHILE;
-> SELECT x AS Number, result as Factorial;
-> END//
Query OK, 0 rows affected (0.17 sec)
프로시저 동작 원리
이 프로시저는 입력값 x를 받아 1부터 x까지의 수를 차례로 곱하는 방식으로 팩토리얼을 계산합니다. 내부적으로 result와 i라는 두 개의 변수를 선언하고, WHILE 반복문을 통해 곱셈을 수행한 뒤 최종 결과를 반환합니다.
저장 프로시저 호출하기
이제 팩토리얼을 구하고 싶은 값을 인수로 전달하면서 프로시저를 호출해 보겠습니다.
mysql> Delimiter ;
mysql> CALL Fact(5);
+--------+-----------+
| Number | Factorial |
+--------+-----------+
| 5 | 120 |
+--------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> CALL Fact(6);
+--------+-----------+
| Number | Factorial |
+--------+-----------+
| 6 | 720 |
+--------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
실행 결과를 보면 Fact(5) 호출 시 120(= 5×4×3×2×1), Fact(6) 호출 시 720(= 6×5×4×3×2×1)이 정상적으로 출력되는 것을 확인할 수 있습니다.
참고 사항
구분자(Delimiter)를 //로 변경하는 이유는 프로시저 본문에 포함된 세미콜론(;)이 MySQL이 문장의 끝으로 잘못 해석하는 것을 방지하기 위해서입니다. 프로시저 생성이 완료되면 반드시 구분자를 다시 ;로 되돌려야 일반적인 쿼리 실행이 가능합니다.