将变量的值设置为MySQL中SELECT语句的结果

将变量的值设置为MySQL中SELECT语句的结果,mysql,Mysql,我想在Mysql中创建以下函数,但是函数没有被创建,但是由于一个错误而失败 DELIMITER $$ CREATE FUNCTION MapAccountType(AccountTypeID INT) RETURNS VARCHAR(50) DETERMINISTIC BEGIN DECLARE @AccountType varchar(50); SELECT AccountType INTO @AccountType FROM AccountType

我想在Mysql中创建以下函数,但是函数没有被创建,但是由于一个错误而失败

DELIMITER $$
CREATE FUNCTION MapAccountType(AccountTypeID INT) 
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
    DECLARE @AccountType varchar(50);
    SELECT AccountType INTO @AccountType 
            FROM AccountType 
            WHERE AccountTypeID = AccountTypeID);
    RETURN AccountType;
END $$
DELIMITER ;
对我桌子的描述

CREATE TABLE AccountType(
    AccountTypeID INT AUTO_INCREMENT PRIMARY KEY,
    AccountType varchar(100) UNIQUE NOT NULL
);
我得到的错误是

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near '@AccountType varchar(50);
我似乎无法发现我做错了什么。有人能帮忙吗。

这应该可以:

DELIMITER $$
CREATE FUNCTION MapAccountType(AccountTypeID INT) 
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
    SELECT AccountType INTO @AccountType FROM AccountType
    WHERE AccountTypeID = AccountTypeID;

    RETURN @AccountType;
END $$
DELIMITER ;
这也将有助于:

DELIMITER $$
CREATE FUNCTION MapAccountType(AccountTypeID INT) 
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
    DECLARE v_AccountType varchar(50) DEFAULT NULL;

    SELECT AccountType INTO v_AccountType FROM AccountType
    WHERE AccountTypeID = AccountTypeID;

    RETURN v_AccountType;
END $$
DELIMITER ;

第一个示例使用“全局”变量(以“@”符号开头的变量)。第二个示例使用一个“局部”变量。

您的函数不是严格确定的,因为为AccountTypeID返回的AccountType可以根据基础表进行更改。