MySQL存储过程:虽然查询返回结果,但变量集为null

MySQL存储过程:虽然查询返回结果,但变量集为null,mysql,stored-procedures,Mysql,Stored Procedures,我的存储过程有问题,这一部分对我来说更具体: CREATE FUNCTION calculCommission ( idprogramV INT , idmodeV INT , amount DECIMAL(10,2) , amount_total DECIMAL(10,2) ,idformat INT ) RETURNS DECIMAL(10,2) BEGIN

我的存储过程有问题,这一部分对我来说更具体:

   CREATE FUNCTION calculCommission
   (
          idprogramV INT
          , idmodeV INT
          , amount DECIMAL(10,2)
          , amount_total DECIMAL(10,2)
          ,idformat INT
   )
   RETURNS DECIMAL(10,2)
   BEGIN
      DECLARE commission DECIMAL(10,2);
      DECLARE total_amount_default DECIMAL(10,2);
      IF amount_total IS NULL OR amount_total = '' THEN

          SET total_amount_default = (SELECT CONVERT(`value`+commission,DECIMAL(10,2)) as default_amount 
                                      FROM remunerations r 
                                      JOIN groups g 
                                             on g.idgroup = r.idgroup 
                                      WHERE g.idprogram=idprogramV 
                                             AND r.idmode=idmodeV 
                                             AND g.`default`=1);

          SET commission = (total_amount_default - amount);

      ELSE
          SET commission = amount_total - amount;

      END IF;
     RETURN commission;
   END$$
首先,我意识到将空值传递给“amount_total”的过程将无法正确解析。 如果amount\u total为NULL,则如果amount\u total参数设置为NULL,则返回false,但它被视为空字符串。奇怪,但我用了“或数量\总数=”,解决了这个问题

现在我的问题是设置总金额默认行。 当我在SQL客户机中手动执行应该提取到变量中的查询时,我会得到一个结果(0.56)。但是在存储过程中,它总是返回NULL

我想知道这是否与数据类型有关,所以我尝试转换结果,或者转换传递给查询的变量。但我有其他过程,可以使用完全相同的表达式类型给出正确的结果

我在那里挠头,不知道如何解决这个问题

谢谢你的帮助

编辑:我添加了一些调试以查看发生了什么: 在尝试查询之前,idprogramV值为:4258 idmodeV值,同一时间为:1 使用带有这些参数的查询返回0.52,但我尝试将结果直接插入表中以查看它的外观,结果为NULL。。。 实际上,我不知道出了什么问题,我猜这是对查询执行变量的替换


编辑2:好吧,新手犯了个错误

我请求的字段与存储过程中声明的变量同名

该变量用于查询,而不是表字段


谢谢!

使用此选项从查询中为变量赋值:

SELECT total_amount_default = CONVERT(`value`+commission,DECIMAL(10,2))
FROM remunerations r 
JOIN groups g 
      on g.idgroup = r.idgroup 
WHERE g.idprogram=idprogramV 
      AND r.idmode=idmodeV 
      AND g.`default`=1);

编辑2:好吧,新手犯了个错误

我请求的字段与存储过程中声明的变量同名

该变量用于查询,而不是表字段

谢谢我


(就在那里寻找徽章;)

如果您没有自学徽章,您应该提交一份答案,以便尝试自学徽章:)