存储过程返回错误的值

时间:2016-11-02 18:37:47

标签: mysql database stored-procedures procedure

我有一个存储过程,一直给我错误的答案。我问程序返回汽车保险的价值。我运行程序并给我总计汽车保险费,但如果我第四次运行它,它会给我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 个答案:

答案 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