【问题标题】:#1305 - FUNCTION does not exist - nested loops#1305 - 函数不存在 - 嵌套循环
【发布时间】:2014-04-24 23:56:48
【问题描述】:

所以,我收到关于未定义函数的错误。每次我尝试使用计数器变量来引用表中的特定条目时都会发生这种情况。没看懂。

为了更清楚,我被告知为了在 mysql 中使用循环,我必须创建一个我已经完成的“程序”。计数和成分计数变量是对表 tDrinks 和 tUniqueingredients 中正在检查的行的引用。

我正在尝试为表 tDrinkMix 中的 tDrinks 生成饮料 ID 的外键引用。我希望为饮料中独特成分的每个实例都有一个饮料 ID 条目。有 16.5k 饮料和 2.2k 独特成分。

现在它在 SELECT id(count) FROM tDrinks 上死掉了。如果我删除那里的 (count),它会在 WHERE d_shopping(count) 处死掉。

抛出的错误是#1305,它说函数 DrinksDB.id 没有定义

DROP PROCEDURE `test`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
 DECLARE count INT DEFAULT 0;
 DECLARE ingredientcount INT DEFAULT 0;
 WHILE count < 16532 DO
    WHILE ingredientcount < 2202 DO
      INSERT INTO tDrinkMix(count)
                 SELECT id(count) FROM tDrinks
                 WHERE d_shopping(count)
                  LIKE CONCAT('%',tUniqueingredients.ingredient(ingredientcount),'%');
      SET ingredientcount = ingredientcount + 1;
    END WHILE;
   SET count = count + 1;
 END WHILE;
END

所以我正在努力改进这一点,但我还没有完全做到。你怎么知道这是我的第一个数据库项目?我认为以下越来越接近:该过程至少可以保存并且看起来可以执行

delimiter //

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
 DECLARE count INT DEFAULT 0;
 DECLARE ingredientcount INT DEFAULT 0;
 WHILE count < 16532 DO
    WHILE ingredientcount < 2202 DO
      INSERT INTO tDrinkMix(drink_id)

                SELECT id
                FROM tDrinks
                WHERE id = count

                and

                d_shopping

                LIKE 
                (SELECT CONCAT (ingredient,'%') FROM tUniqueingredients WHERE id = ingredientcount);

      SET ingredientcount = ingredientcount + 1;
    END WHILE;
   SET count = count + 1;
 END WHILE;
END//

【问题讨论】:

  • 你希望id(count) 做什么?
  • 您能提供样本数据和预期结果吗?特别是,想要这两个带有 count 的表达式做什么?
  • 我正在构建一个外键引用。我想获取饮料 ID,并让它重复多次,因为有成分。有 16k 饮料和 2k 原料。有些饮料有多达 15 种成分,并且它们的 id 重复次数与成分相同。我预计结束时可能有 80k 的结果
  • 我希望 id(count) 返回字段 'id' 的数值,我在表 'tDrinks' 中的计数中购物清单中的项目与独特的成分匹配跨度>
  • “我在哪里”是指“行号”吗?如果没有,你能描述得更清楚吗?

标签: mysql for-loop syntax-error nested-loops


【解决方案1】:

我相信错误的发生是因为解析器将 id(count) 解释为一个函数。它正在您的数据库中寻找一个函数,我猜它是 DrinksDB。当您从 id 中删除 (count) 时,它会移动到 d_shopping(count) 的下一个语法错误,并在数据库中查找名为 d_shopping 的函数。 我很感激我来晚了(我只是在扫描未解决的问题),所以它可能不再是问题了。如果仍然有问题发表评论。

【讨论】:

  • 如果您“相信”这应该是评论,而不是答案。
猜你喜欢
  • 2018-08-14
  • 2016-09-21
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多