Mysql存储过程错误1064

Mysql存储过程错误1064,mysql,stored-procedures,Mysql,Stored Procedures,我正在编写一些代码,遇到了这个存储过程问题。。。我已经花了太长时间在看它了,所以如果有人能告诉我,我在哪里,这是一个noob 我得到以下错误: 错误代码:1064 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在'@ownerid varchar(50)附近使用的正确语法; 声明@activetinyint; 声明@subuser tinyint; 在第4行设置“1” 关于此代码: DELIMITER // USE `test`// DROP PROCEDURE

我正在编写一些代码,遇到了这个存储过程问题。。。我已经花了太长时间在看它了,所以如果有人能告诉我,我在哪里,这是一个noob

我得到以下错误:

错误代码:1064 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在'@ownerid varchar(50)附近使用的正确语法; 声明@activetinyint; 声明@subuser tinyint; 在第4行设置“1”

关于此代码:

    DELIMITER //

USE `test`//

DROP PROCEDURE IF EXISTS `getAccount`//

CREATE DEFINER=`peter`@`%` PROCEDURE `getAccount`( IN cid VARCHAR(20))
BEGIN
    DECLARE cardid VARCHAR(50);
    DECLARE @ownerid VARCHAR(50);
    DECLARE @active TINYINT;
    DECLARE @subuser TINYINT;
    SET cardid = MD5( cid + SHA1(cid + 'a salt value'));

    SELECT @active = active, @ownerid = ownerid, @subuser = subuser FROM cards_tbl WHERE cardhash = cardid;

    IF @active = 1 THEN
        IF @subuser = 1 THEN
            SELECT subuser_m2s_tbl.name,subuser_m2s_tbl.image, user_saldo.saldo AS credits FROM subuser_m2s_tbl 
            JOIN user_saldo ON subuser_m2s_tbl.subhash = user_saldo.userhash 
            WHERE subuser_m2s_tbl.subhash = @ownerid;
        ELSE
            SELECT user_m2s_tbl.name,user_m2s_tbl.image, user_saldo.saldo AS credits FROM user_m2s_tbl 
            JOIN user_saldo ON user_m2s_tbl.userhash = user_saldo.userhash 
            WHERE user_m2s_tbl.userhash = @ownerid; 
        END IF;
    END IF; 
    END$$

DELIMITER ;
我对存储过程不熟悉,所以它确实非常简单。。。。。
提前谢谢

可能是丢失的吗@

DECLARE cardid VARCHAR(50);

...

DECLARE @cardid VARCHAR(50);

在SELECT语句中将值传递给变量时,应该使用“:=”而不是“=”,否则MySQL只会与操作数进行比较

SELECT
  active_var := active, ownerid_var := ownerid, subuser_var := subuser
FROM
  cards_tbl
WHERE
  cardhash = cardid;
也可以使用SELECTINTO语句,例如-

SELECT
  active, ownerid, subuser
INTO
  active_var, ownerid_var, subuser_var
FROM
  cards_tbl
WHERE
  cardhash = cardid;

.

尝试删除变量前面的@。。这实际上让过程运行起来了(谢谢,到目前为止),但现在我得到了3个变量作为结果,而接下来的2个select语句中的一个没有任何结果,这是我期望得到的?!?有什么帮助吗?到目前为止,谢谢你的帮助和建议,我只剩下一个问题,那就是我的md5/sha1线路不工作,有人能帮我吗?显然mysql不理解它?不知道为什么,但这行没有返回正确的答案:SET cardd=MD5(cid+SHA1(cid+a salt value));制定一个问题,添加有关该问题的更多信息。也许,写一个新问题。