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

MySQL 저장 프로시저로 숫자의 팩토리얼(계승) 구하는 방법

팩토리얼 계산용 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까지의 수를 차례로 곱하는 방식으로 팩토리얼을 계산합니다. 내부적으로 resulti라는 두 개의 변수를 선언하고, 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이 문장의 끝으로 잘못 해석하는 것을 방지하기 위해서입니다. 프로시저 생성이 완료되면 반드시 구분자를 다시 ;로 되돌려야 일반적인 쿼리 실행이 가능합니다.