此过程的目标是使用星期几来确定服务的调整后价格。例如,在周末,价格上涨10%。周一和周五,价格相同。周二到周四减少了5%。最后的消息应该是新的调整价格。
我以为我正确地这样做了。但是我的声明值出现了重大错误。
任何帮助将不胜感激。谢谢。
Create procedure DayOfWeek( inout p_price decimal(7,2), inout p_date date, out v_msg varchar(10))
begin
declare increase10 double;
set increase10 = p_price * (1.1);
declare decrease5 double;
set decrease5 = p_price * (0.95);
declare increase10cast varchar(10);
set increase10cast := cast(increase10 as char);
declare decrease5cast varchar(10);
set decrease5cast := cast(decrease10 as char);
declare regular varchar(10);
set regular := cast(p_price as char );
case
when p_price is null then
set v_msg := 'null';
when p_date is null then
set v_msg := 'null';
when weekday(p_date) in (0, 6) then
set v_msg := increase10cast;
when weekday(p_date) in (1, 5) then
set v_msg := regular;
when weekday(p_date) in (2, 2, 4) then
set v_msg := decrease5cast;
end case;
end;
#
答案 0 :(得分:1)
首先声明所有变量然后转到set语句 -
Create procedure a05_AdjustPrice_ByDayOfWeek( in p_price decimal(7,2), in p_date date, out v_msg varchar(10))
begin
declare increase10 double;
declare decrease5 double;
declare increase10cast varchar(10);
declare decrease5cast varchar(10);
declare regular varchar(10);
set increase10 = p_price * (1.1);
set decrease5 = p_price * (0.95);
set increase10cast := cast(increase10 as char);
set decrease5cast := cast(decrease5 as char);
set regular := cast(p_price as char );
case
when p_price is null then
set v_msg := 'null';
when p_date is null then
set v_msg := 'null';
when weekday(p_date) in (0, 6) then
set v_msg := increase10cast;
when weekday(p_date) in (1, 5) then
set v_msg := regular;
when weekday(p_date) in (2, 2, 4) then
set v_msg := decrease5cast;
end case;
end;
声明语句必须位于Begin ... End块的开头。请参阅Docs
将INOUT参数更改为IN参数。你可以像 -
那样执行它call a05_AdjustPrice_ByDayOfWeek(100, '2012-09-09', @msg);
select @msg;