我有一个存储过程,一直给我错误的答案。我问程序返回汽车保险的价值。我运行程序并给我总计汽车保险费,但如果我第四次运行它,它会给我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
任何帮助请...
答案 0 :(得分:0)
SELECT DATEDIFF(NOW(),dob) / 365.25 AS ageRange from dual;
不会设置变量ageRange
,但它会执行select
(计算值的)并命名结果集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