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:好吧,新手犯了个错误 我请求的字段与存储过程中声明的变量同名 该变量用于查询,而不是表字段 谢谢我
(就在那里寻找徽章;)如果您没有自学徽章,您应该提交一份答案,以便尝试自学徽章:)