【问题标题】:#1064-error in sql syntax#1064-sql 语法错误
【发布时间】:2014-10-08 16:27:58
【问题描述】:

我一直在尝试通过 mySql 过程通过用户名和密码验证用户

    delimiter //
    create function validate_user(username_1,password_1)
    return char(1)
    DETERMINISTIC
    begin
    declare ret char(1);
    if exists(select * from logintable where userid=username_1 and password=password_1) then
       set ret='1';
    endif;
    return (ret);
    end;//
    delimiter ;

但我在 sql 语法中遇到错误 #1064 错误。

【问题讨论】:

  • 错误是否表明哪里语法问题出在哪里?
  • 说的是第 1 行..

标签: mysql stored-procedures mysql-error-1064


【解决方案1】:

代码中的第 3 行

return char(1)

应该是

returns char(1)

【讨论】:

    【解决方案2】:

    一些事情;

    • 您没有为参数声明类型。
    • RETURN 应该是函数声明中的 RETURNS
    • ENDIF 应该是 END IF

    换句话说;

    create function validate_user(username_1 VARCHAR(32), password_1 VARCHAR(32))
    returns char(1)
    DETERMINISTIC
    begin
    declare ret char(1);
    if exists(select * from logintable where userid=username_1 and password=password_1) then
       set ret='1';
    end if;
    return (ret);
    end;//
    

    An SQLfiddle with all corrections.

    【讨论】:

    • 谢谢,还有一个疑问..我创建了一个触发器,我使用了 endif,它工作得非常好..你能解释一下区别吗..
    • @SudhirSomasundaram 抱歉,不,我想不出 ENDIF 可以工作的地方。 ELSEIF 是我所知道的最接近的。
    • 对不起我的错..我没有注意到正确..return关键字用于什么??
    • @SudhirSomasundaram RETURNS 表示函数的返回类型是什么,RETURN 设置整个函数的返回值。比如你可能想用RETURNS INT说函数的返回值是一个整数,RETURN 5让整个函数返回5。
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多