我正在尝试编写一个存储过程来迭代价格表和产品表。如果价格与产品表中的ID匹配,则应将生效日期早于今天的最新价格应用于产品表中的“currentPrice”列。因此,“currentPrice”列包含最新的活动价格。并且可以通过将未来日期插入到价格表中来安排价格变化。
目前我有这个:
DELIMITER $$
create procedure updatePrice()
begin
declare loopLeng int default 1000;
declare loopMax int default 1099;
declare newPrice decimal(10,2);
--select min(idProduct) into loopLeng from product;
--select count(idProduct) into loopMax from product;
set loopLeng = 1000;
set loopMax = 1099;
updateLoop : LOOP
if loopLeng > loopMax then
leave updateLoop;
end if;
select price into newPrice from price where idProduct = loopLeng and dateApplicableFrom = (select max(dateApplicableFrom) from price where idProduct = loopLeng and dateApplicableFrom <= current_timestamp());
update product set currentPrice = newPrice where idProduct = loopLeng;
set loopLeng = loopLeng + 1;
end loop;
end
$$ DELIMITER ;
这可以正常工作...但显然包含loopLeng和loopMax的硬编码值(定义product上循环的大小),所以如果产品数量发生变化,它就不灵活了。我想根据idProduct和count的实际最小值动态设置这些值,就像在注解行7和8中那样。这看起来应该对我有效,不会给予任何错误,但是每当我使用这些定义执行过程时,它都无法执行必要的更新。
我也试过创建临时变量,选择函数结果到那些变量中,然后把 those 赋值给loopLeng和loopMax,但是结果是一样的,到目前为止我只能用硬编码的值来执行,谁能告诉我哪里出错了吗?
1条答案
按热度按时间luaexgnf1#
尝试使用预准备语句,如下所示: