【问题标题】:MySQL function with query inside it里面有查询的 MySQL 函数
【发布时间】:2017-07-13 20:55:17
【问题描述】:

我使用这个 mysql 函数通过传递三个参数来检索列数据的总和。无论 where 子句如何,函数都会返回整列的总和。 我的意思是函数内部的查询没有 where 子句,并且在没有函数的情况下使用该查询可以正常工作。 这是函数

DELIMITER $$
CREATE FUNCTION calculate_customer_loan(customer_id INT, currency VARCHAR(10), type VARCHAR(10)) RETURNS DOUBLE
BEGIN
    DECLARE total DOUBLE;
    SELECT SUM(`amount`) INTO total FROM `deals` WHERE `customer_id` = customer_id AND `currency` = currency AND `type` = type;
    RETURN total;
END
$$
DELIMITER ;

任何想法! 帮帮我。

【问题讨论】:

  • 重命名你的函数参数。

标签: mysql function


【解决方案1】:

您的参数名称与列名称匹配存在问题。列名获胜。

所以,为参数命名以避免歧义:

DELIMITER $$
CREATE FUNCTION calculate_customer_loan (
    in_customer_id INT,
    in_currency VARCHAR(10),
    in_type VARCHAR(10)
) RETURNS DOUBLE
BEGIN
    DECLARE v_total DOUBLE;

    SELECT SUM(d.amount) INTO v_total
    FROM deals d
    WHERE d.customer_id = in_customer_id AND
          d.currency = in_currency AND
          d.type = in_type;
    RETURN v_total;
END
$$
DELIMITER ; 

我删除了反引号。它们不是必需的,而且——更重要的是——它们不区分列名和变量名。

【讨论】:

  • “列名获胜” - 我不会这么说:stackoverflow.com/questions/715229/…
  • @PaulSpiegel 。 . .这个答案似乎是不正确的。
  • 那个答案似乎是正确的。这是一个简单的测试:rextester.com/JEWVL30269 但是我仍然会使用不同的名称。
  • @GordonLinoff 这个答案没有错字。你从来没有真正设置过 v_total。
  • @Mike 。 . .谢谢。
猜你喜欢
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多