MySQL中的自定义函数

我试图在
MySQL中创建一个简单的自定义函数,它接受2个值(id int,currencyValue double),根据id查找另一个表中的值并返回currencyValue * rate.

这是我的伪代码,它没有让我接近这个. Google上也出现了令人惊讶的缺乏示例.

DROP FUNCTION IF EXISTS ConvertCurrency
DROP FUNCTION IF EXISTS F_ConvertCurrency //
CREATE FUNCTION F_ConvertCurrency(PID INT, C_VALUE DOUBLE) 
RETURNS DOUBLE
BEGIN

  DECLARE Currency_Rate DOUBLE;

  SET Currency_Rate = SELECT `Rate` FROM `Currencies` WHERE `ID` = PID;
  RETURN Currency_Rate*C_VALUE;
END;//

我得到’你的代码附近有一个错误……’这对我毫无帮助.
我已经看到了DELMITER关键字的其他函数示例,但不知道这意味着什么.

最佳答案 你应该暂时将DELIMITER设置为除分号(我使用$$)以外的其他东西,以便在存储的函数定义的主体中使用分号.

您可以使用SELECT … INTO …来设置本地Currency_Rate变量.我建议在变量名前加上v_前缀,以表示它是一个局部变量而不是一个表列.

以下是使用您的代码的示例:

DELIMITER $$

DROP FUNCTION IF EXISTS ConvertCurrency $$
DROP FUNCTION IF EXISTS F_ConvertCurrency $$
CREATE FUNCTION F_ConvertCurrency(PID INT, C_VALUE DOUBLE) 
RETURNS DOUBLE
BEGIN

  DECLARE v_Currency_Rate DOUBLE;

  SELECT `Rate` 
  INTO v_Currency_Rate
  FROM `Currencies` 
  WHERE `ID` = PID;

  RETURN v_Currency_Rate*C_VALUE;
END $$

DELIMITER ;
点赞