2016-11-11 114 views
0
DELIMITER // 
DROP FUNCTION IF EXISTS TotalProductionCost; 
CREATE FUNCTION TotalProductionCost(Abuilt int(10),Ucost Decimal(5,2)) 
RETURNS Decimal(5,2) 
BEGIN 
DECLARE TotalCost Decimal(5,2); 
SET TotalCost = Abuilt * Ucost; 
RETURN TotalCost; 
END // 
DELIMITER ; 

SELECT TotalProductionCost(10,1000) AS TotalCost; 

我已经创建了上述函数时执行它在mysql工作台它工作正常查询执行,但当我调用函数,它没有返回任何东西..查询成功执行。我的功能没有任何返回

+1

这应该会返回一些东西。值得注意的是,你试图在'DECIMAL(5,2)'中返回'10000',这会导致截断和数据丢失,q.v. [this Fiddle](http://sqlfiddle.com/#!9/9eecb7d/85025)。如果您打算将这些数字用作输入,则可能需要提高返回类型的精度。 –

+0

是的..我增加了精度和工作..非常感谢你 – Riya

回答

1

根据(5,2)的输入和输出,小数的大小会发生爆炸。

以下工作:

DROP FUNCTION IF EXISTS TotalProductionCost; 
DELIMITER $$ 
CREATE FUNCTION TotalProductionCost(Abuilt int,Ucost DECIMAL(12,2)) 
RETURNS Decimal(12,2) 
DETERMINISTIC 
BEGIN 
    DECLARE TotalCost Decimal(12,2); 
    SET TotalCost = Abuilt * Ucost; 
    RETURN (TotalCost); 
END $$ 
DELIMITER ; 

测试:

SELECT TotalProductionCost(10,1000.12) AS TotalCost; 

所以,是的,我确定你的哽咽。你需要小心你的尺寸,以便进入和返回。

+0

奇怪的部分是没有产生任何错误? –

+0

也总是在分隔符设置之前做'DROP'。所以你把第1行和第2行倒过来了。但是@JuanCarlosOropeza是很奇怪 – Drew

+0

谢谢大家..是的..它没有产生任何错误。, – Riya