gpt4 book ai didi

mysql - 在 MySQL 存储过程中选择不返回值

转载 作者:行者123 更新时间:2023-11-29 01:04:31 24 4
gpt4 key购买 nike

我有一个存储过程,如下所示,我创建它是为了将美元销售额添加到当前仅存储单位销售额的表 (WeeklySales) 中。游标在 WeeklySales 表上运行。定价数据存储在定价表中。定价表实际上包含价格的变化。价格更改的生效日期存储在 Pricing.effectiveDate 中,因此我必须找到在售出该单位的那一周有效的定价(存储在 WeeklySales.weekStart 中)。

我遇到的问题是 IF 之后的第一个选择没有返回任何内容。我已经确认,当我使用在过程内部调用它的值在过程外部运行它时,此 select 确实会返回一个值。我不确定这里出了什么问题,但我猜这可能与此选择在与游标不同的表上运行这一事实有关?有人知道吗?有更好的方法吗?

DELIMITER //

CREATE PROCEDURE `createWeeklyPricing` (IN startDate DATE, IN endDate DATE)
BEGIN
--
-- Populate the proceeds column using the Pricing table
DECLARE product VARCHAR(255);
DECLARE weekStart DATE;
DECLARE units, done INT;
DECLARE proceeds DECIMAL(6,2);
DECLARE effectiveDate DATE;
DECLARE currentRow CURSOR FOR SELECT `weekStart`, `product`, `units` FROM `WeeklySales` WHERE `weekStart` >= startDate AND `weekStart` <= endDate;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN currentRow;
SET done = 0;
WHILE done = 0 DO
FETCH currentRow INTO weekStart, product, units;
IF done = 0 THEN
SELECT MAX(`effectiveDate`) FROM `Pricing` WHERE `effectiveDate` <= weekStart AND `product` = product INTO effectiveDate;
SELECT `proceeds` FROM `Pricing` WHERE `effectiveDate` = effectiveDate AND `product` = product INTO proceeds;
UPDATE `WeeklySales` SET `proceeds` = units * proceeds WHERE `weekStart` = weekStart AND `product` = product;
END IF;
END WHILE;
CLOSE currentRow;

END//

最佳答案

在 if 语句之前回显(选择)weekstart...

如果它返回 null,请更改 select FROM WeeklySales WHERE weekStart between startDate AND endDate

关于mysql - 在 MySQL 存储过程中选择不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com