我复制了生成的存储过程。
重新运行后,我得到你的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
添加分隔符//并以分隔符结尾;没有任何帮助。没有错误,但也没有创建存储过程。 任何和所有的帮助欢迎......
答案 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()
. . .