2016-11-11 116 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