我遇到了存储过程的问题,这部分对我来说更具体:
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”传递NULL值。 如果amount_total参数设置为NULL,则IF amount_total IS NULL将返回false,但它被视为空字符串。很奇怪,但我使用“OR amount_total =''来解决这个问题。
现在我的问题是SET total_amount_default行。 当我手动执行应该被提取到SQL客户端中的变量的查询时,我得到一个结果(0.56)。但是在存储过程中,它总是返回NULL。
我想知道这是否与数据类型有关,所以我试图转换结果,或者传递给查询的变量。但我有其他程序可以使用完全相同的表达式给出正确的结果。
我正在那里挠头,并且不知道如何解决这个问题。
感谢您的帮助
编辑:我添加了一些调试,看看发生了什么: idprogramV值,就在尝试查询之前是:4258 idmodeV值,同时为:1 使用带有这些参数的查询返回0.52,但我尝试将结果直接插入表中以查看它的样子,并且我得到NULL ... 我真的不知道什么是错的,我猜它是替换查询执行的变量。
Edit2:Okaaaaaay新手在这里犯了错误。
我正在请求一个与我的存储过程中声明的变量同名的字段。
该变量用于查询而不是表字段。
谢谢我!
答案 0 :(得分:1)
Edit2:Okaaaaaay新手在这里犯了错误。
我正在请求一个与我的存储过程中声明的变量同名的字段。
该变量用于查询而不是表字段。
谢谢我!
(在那里寻找徽章;))
答案 1 :(得分: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);