【问题标题】:Mysql stored procedure error 1064Mysql存储过程报错1064
【发布时间】:2012-08-02 17:23:41
【问题描述】:

我正在编写一些代码,但被这个存储过程问题困住了......现在花了太长时间看它,所以请如果有人能告诉我我在哪里是一个菜鸟。

我收到以下错误:

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

关于此代码:

    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 ;

我是存储过程的新手,所以它非常简单...... 提前致谢

【问题讨论】:

  • 尝试删除变量前面的@..
  • 这实际上让程序运行(感谢到目前为止),但现在我得到了 3 个变量作为结果,而接下来的 2 个选择语句之一没有任何结果,这是我期望得到的?!?有什么帮助吗?

标签: mysql stored-procedures


【解决方案1】:

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

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

您也可以使用 SELECT INTO 语句,例如-

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

SELECT syntax.

【讨论】:

  • 到目前为止,感谢您的所有帮助和建议,我只剩下一个问题,即我的 md5/sha1 行不工作,有人可以帮我解决这个问题吗?貌似mysql看不懂?
  • 不知道为什么,但是这一行没有返回正确的答案: SET cardid = MD5( cid + SHA1(cid + 'a salt value'));
  • 形成一个问题,添加有关该问题的更多信息。也许,写一个新问题。
【解决方案2】:

可能是缺少了@

DECLARE cardid VARCHAR(50);

...

DECLARE @cardid VARCHAR(50);

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2018-06-21
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多