#1064 - 你的SQL语法附近有错误''

时间:2014-03-27 22:17:33

标签: mysql sql

我复制了生成的存储过程。

重新运行后,我得到你的SQL语法错误附近''在第11行。

CREATE DEFINER=`root`@`%` PROCEDURE `usp_TEST`()
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT 'Returns the total number of available vehicles'
BEGIN
    SELECT  COUNT(*) AS Total
    FROM    FLEET
    WHERE RENTED = 0
    AND     InService = 1;
END

添加分隔符//并以分隔符结尾;没有任何帮助。没有错误,但也没有创建存储过程。 任何和所有的帮助欢迎......

2 个答案:

答案 0 :(得分:2)

正如您已经猜到的那样,为了让您的MySQL 客户端不解释;语句终止SELECT语句作为CREATE PROCEDURE的结尾声明,您必须告知它您希望使用其他声明分隔符。

mysql命令行客户端中,您可以使用DELIMITER command执行此操作。例如,要将语句分隔符更改为双正斜杠:

DELIMITER //

如果使用其他一些客户端软件,则必须检查其文档以发现更改语句分隔符的适当方法。

完成后,您可以执行以下操作:

CREATE DEFINER='root'@'%' PROCEDURE usp_TEST()
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT 'Returns the total number of available vehicles'
BEGIN
    SELECT COUNT(*) AS Total
    FROM   FLEET
    WHERE  RENTED = 0
    AND    InService = 1;
END//

但是,因为在这种情况下,您的程序只包含一个语句,所以您不需要使用BEGIN ... END compound statement block,因此可以完全避免更改分隔符:

CREATE DEFINER='root'@'%' PROCEDURE usp_TEST()
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT 'Returns the total number of available vehicles'
SELECT COUNT(*) AS Total
FROM   FLEET
WHERE  RENTED = 0
AND    InService = 1;

答案 1 :(得分:0)

http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html说:

  

如果为DEFINER子句指定了用户值,则它应该是指定为'user_name'@'host_name'的MySQL帐户(与GRANT语句中使用的格式相同)

换句话说,您需要引用用户名和主机名。将它们视为字符串文字:

CREATE DEFINER='root'@'%' PROCEDURE usp_TEST()
. . .