MySql-如何消除无数据:获取零行

MySql-如何消除无数据:获取零行,mysql,Mysql,因此,我编写了这个小的存储函数,它应该将一个果汁订单的成本返回给我。然而,我很难弄清楚为什么它不起作用。任何帮助都将不胜感激 DELIMITER $$ CREATE DEFINER=`root`@`localhost` FUNCTION `juiceOrderCost`(p_id INT) RETURNS double BEGIN DECLARE cost DOUBLE; DECLARE i INT DEFAULT 0; DECLARE numRows INT; DECLARE numDone

因此,我编写了这个小的存储函数,它应该将一个果汁订单的成本返回给我。然而,我很难弄清楚为什么它不起作用。任何帮助都将不胜感激

DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `juiceOrderCost`(p_id INT) RETURNS double
BEGIN
DECLARE cost DOUBLE;
DECLARE i INT DEFAULT 0;
DECLARE numRows INT;
DECLARE numDone INT DEFAULT 1;
DECLARE cup_id INT DEFAULT 0;

DECLARE myCursor CURSOR for
    SELECT cupId FROM hasJuice WHERE orderID = p_id;

OPEN myCursor;
SELECT FOUND_ROWS() INTO numRows;

FETCH myCursor INTO cup_id;
WHILE numDone <= numRows DO

SET cost =  cost + juiceCupCost(cup_id);

FETCH myCursor INTO cup_id;

SET numDone = numDone + 1;

END WHILE;

CLOSE myCursor;
退货成本; 结束

使用未找到的声明继续处理程序
访问

为什么选择光标。juiceCupCost在哪里。您在哪里为NOT FOUND设置了DECLARE CONTINUE处理程序SET done=TRUE;人们经常使用光标,因为他们喜欢按程序思考,还没有进入设定和关系的思维模式。诅咒者像狗一样奔跑。寻找连接和聚合函数。主要使用游标,因为这是我能想到的唯一解决方案。至少可以说我是个新手。我还没有证实这一点。juiceCupCost是同一数据库中的一个函数。那一个很好用。给我一个丘比特,它给了我那个丘比特的代价。我不知道你所说的read loop/是什么意思。基本上我想做的就是找到对应于某个OrderId的行。读取该orderId指定的丘比特。在那个丘比特身上运行juiceCupCost。加上所有杯子的费用,然后打印出来。我确信有比我所概述的更好的方法,但我似乎想不起来。“我会喜欢一些想法的。”Drew-关于如何使用联接和聚合实现我刚才概述的目标,您有什么想法吗。我很理解这一点,但我似乎想不出我该如何在这里应用这一点。