我在使用存储过程的问题,这一部分对我来说更加具体: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新手的错误:
如果你没有它,你应该在自学者徽章上提交一个答案。 – Poodlehat 2012-03-07 15:50:39