2013-07-01 24 views
0

我可以調用mysql函數內的存儲過程。我嘗試過,但它會引發語法錯誤。可能嗎?在mysql函數中調用storedprocedure

DELIMITER $$ 

DROP FUNCTION IF EXISTS `fn_abcd`$$ 

CREATE FUNCTION `fn_abcd`(orderItem BIGINT(45),quantity INT) RETURNS double 
BEGIN 

    DECLARE TotalNetValue DOUBLE; 
    set TotalNetValue = call sp_abcd(orderItem,quantity); 
    RETURN TotalNetValue; 
    END$$ 

DELIMITER ; 
+0

我認爲你需要使用INOUT參數來獲得你的輸出。你可以檢查文件嗎? – mohkhan

+0

show create sp_abcd – chetan

回答

0

存儲過程沒有返回值。你根本不能這樣做:

SET someVar = CALL someProcedure();

如果您需要中檢索的程序計算出一定的價值,你需要:

  • 有你的存儲過程寫在會話變量(SELECT something INTO @var)的數據(這是醜陋的,但它的工作原理)
  • 使用INOUT參數
  • 重寫過程作爲函數

應當理解,大多數驅動器(JDBC,PDO)將把結果在存儲過程中執行的最後一條SELECT語句,因爲查詢的結果如CALL some_procedure()。此功能是specific to the MySQL client/server protocol,MySQL SQL語法沒有等效。