展开全部
你的目的:计算任意整数N的阶乘:可能会出现问题,当乘积 大于 bigint的最大值后,就会出错,比如 10000000的10000000次方或者更大的次方,肯定大于bigint的最大值,所以下面的存储过程,进阶成绩在一定的范围内有效。
我来回答吧,我测试过没有问题的
DELIMITER $$
CREATE PROCEDURE `Squair`(input int, n int)
BEGIN
declare totail bigint default input;
declare _index int default 1;
emp_loop: LOOP
if _index >= n then
LEAVE emp_loop;
end if;
set totail = totail * input;
set _index = _index + 1;
end loop emp_loop;
select totail;
END $$
DELIMITER ;
-- 执行
CALL Squair(10,5);
-- 执行下面的语句将会出错
CALL Squair(10000000,10000000);
我来回答吧,我测试过没有问题的
DELIMITER $$
CREATE PROCEDURE `Squair`(input int, n int)
BEGIN
declare totail bigint default input;
declare _index int default 1;
emp_loop: LOOP
if _index >= n then
LEAVE emp_loop;
end if;
set totail = totail * input;
set _index = _index + 1;
end loop emp_loop;
select totail;
END $$
DELIMITER ;
-- 执行
CALL Squair(10,5);
-- 执行下面的语句将会出错
CALL Squair(10000000,10000000);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询