хранимая процедура возвращает неверное значение

У меня есть хранимая процедура, которая дает мне неправильный ответ. Я попросил процедуру возврата стоимости автострахования. Я запускаю процедуру и даю мне общую сумму премии по автострахованию, но если я запускаю ее в 4-й раз, это дает мне значение заявления ageRange select.
Я перевел код в новую процедуру, но все тот же.

Мой код

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `cal_motor_qoute`(in 
coverID int , in dob date,
in sumMotor double , out QMsg varchar(200))
BEGIN
declare policy_cover , total , insRatio, ageExtra double;
declare ageRange int;
declare price_list  varchar(200);

SELECT DATEDIFF(NOW(),dob) / 365.25 AS ageRange from dual;


if (coverID = 1) then
set policy_cover = 0.002;
elseif (coverID = 2) then
set policy_cover = 0.0025;
elseif (coverID = 3) then
set policy_cover = 0.003;
elseif (coverID = 4) then
set policy_cover = 0.0035;
end if;

if ( ageRange < 25) then
set ageExtra = 0.0005;
else
set ageExtra = 0.000;
end if;

set insRatio = policy_cover + ageExtra;
set total = (sumMotor * insRatio )* 10;

set QMsg = concat('total Premium is: ',total);
select @QMsg;
END

Любая помощь пожалуйста..

1 ответ

  1. SELECT DATEDIFF(NOW(),dob) / 365.25 AS ageRange from dual;
    

    не будет устанавливать переменнуюageRange, но она будет делать select(вычисляемого значения) и имя столбца resultset ageRange.

    Один из способов установить значение переменной-использовать into:

    SELECT DATEDIFF(NOW(),dob) / 365.25 into ageRange from dual;
    

    Хотя это, вероятно, не самый точный способ вычислить возраст человека в любом случае. Возможно, потребуется заменить

    if ( ageRange < 25) then
    

    с

    if ( dob > date_sub(now(), interval 25 year) ) then