2012-03-07 274 views
2

我在使用存储过程的问题,这一部分对我来说更加具体:MySQL的存储过程:变量设置为null,但查询结果返回

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$$ 

首先,我意识到,传递NULL值,为“amount_total”将不会被该过程正确解析。 如果amount_total IS NULL将返回false,如果amount_total参数设置为NULL,但它被认为是一个空字符串。奇怪的,但我使用“OR amount_total =''

现在我的问题是,SET total_amount_default行。 当我手动执行查询应该被提取到SQL客户端中的变量,我得到结果(0.56)。但在存储过程中,它总是返回NULL。

我想知道如果这有点与数据类型有关,所以我试图转换结果,或与传递给变量查询,但我有其他程序,给出正确的结果,完全相同的表达式类型。

我正在那里挠我的头,并没有线索如何解决这个问题。起诉。

感谢您的帮助

编辑:我加了一些调试,看看发生了什么事情: idprogramV值,之前尝试查询:4258 idmodeV价值,同时为:1 使用与查询这些参数返回0.52,但我试图直接插入结果到表中,看看它是什么样子,我得到NULL ... 真的,我不知道什么是错的,我猜这是替换变量查询执行。

编辑2:Okaaaaaay新手错误在这里。

我正在请求一个与我的存储过程中声明的变量具有相同名称的字段。

变量用于查询而不是表格字段。

谢谢我!这里Okaaaaaay新手的错误:

+0

如果你没有它,你应该在自学者徽章上提交一个答案。 – Poodlehat 2012-03-07 15:50:39

回答

1

EDIT2。

我正在请求一个与我的存储过程中声明的变量具有相同名称的字段。

变量用于查询而不是表格字段。

谢谢我!

(徽章狩猎在那里;))

0

使用该分配给您的变量从查询:

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); 
相关问题