2016-11-02 4 views
0

Ich habe eine gespeicherte Prozedur, die mir die falsche Antwort gibt. Ich habe das Verfahren gebeten, den Wert der Kfz-Versicherung zurückzugeben. Ich führe das Verfahren und geben Sie mir die Summe der Kfz-Versicherungsprämie, aber wenn ich es zum vierten Mal ausführen, geben Sie mir die AgeRange Select-Anweisung Wert. Ich habe den Code in eine neue Prozedur verschoben, aber immer noch gleich.Gespeicherte Prozedur gibt falschen Wert zurück

Mein Code

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 

Jede Hilfe bitte ..

+0

Frage ersetzen wollen: Warum diese in einer gespeicherten Prozedur durchgeführt wird und nicht im Anwendungscode? – Galz

+0

@Galz es ist eine php-anwendung, gespeicherte prozedur könnte den job vervollständigen – imohd23

Antwort

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

wird die Variable ageRange nicht gesetzt ist, aber es wird eine select tun (von dem berechneten Wert) und die Spalte des Namens Ergebnismenge ageRange.

Der (oder besser gesagt: ein) Weg, um den Wert Ihrer Variablen zu setzen ist into zu verwenden:

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

Obwohl dies wahrscheinlich ohnehin nicht die präziseste Art und Weise ist das Alter einer Person zu berechnen. Sie könnten

if (ageRange < 25) then 

mit

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

es funktioniert !! Danke, aber noch eine kleine Frage. Ich muss den Code twise ausführen, um den neuen Wert zu haben, weil irgendwie das resault vom ersten Mal nicht aktualisiert wird. – imohd23

+0

@ imohd23 Nicht sicher, was du meinst. Könnten Sie ein Beispiel dafür hinzufügen, also wie Sie die Prozedur aufrufen und was (nicht) passiert. Btw, die Verwendung einer Funktion anstelle einer Prozedur scheint eine logischere Wahl dafür - aber wieder, es hängt davon ab, wie Sie es verwenden/aufrufen. – Solarflare

Verwandte Themen