我有这样的存储过程:
CREATE PROCEDURE ProG()
BEGIN
SELECT * FROM `hs_hr_employee_leave_quota`;
END
但它给出了错误:
- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 3 行 '' 附近使用的正确语法#1064
这个错误是什么意思?第 2 行有什么问题?
使用触发器、存储过程等之前必须更改分隔符。
delimiter //
create procedure ProG()
begin
SELECT * FROM hs_hr_employee_leave_quota;
end;//
delimiter ;
如何找出这个 MySQL 错误的意思:
#1064 - You have an error in your SQL syntax;
这个错误没有任何线索。您必须仔细检查所有这些项目,看看您的错误在哪里:
!@#$%^&*()-_=+[]{}\|;:'",<>/?
select
、into
或无数其他关键字。 尽可能多地从损坏的查询中删除,直到它开始工作。然后下次使用具有健全语法报告系统的 PostgreSQL。
分隔符,分隔符...
当程序中有多个语句时,您确实需要它们。 (换句话说,你的代码中是否有一个
;
,然后还有更多语句/命令?那么,你需要使用分隔符)。
对于像您这样简单的程序,您可以这样做:
CREATE PROCEDURE ProG()
SELECT * FROM `hs_hr_employee_leave_quota`;
这可能是 mysql 的内存问题 尝试增加 my.ini 中的 max_allowed_packet
MYSQL PROCEDURE步骤:
分隔符 //
创建PROCEDURE,可以参考语法
注意:不要忘记以 ' 结束语句; '
create procedure ProG() begin SELECT * FROM hs_hr_employee_leave_quota; end;//
分隔符;
调用 ProG();
我在下面遇到了同样的错误:
ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 第 3 行 ')' 附近使用的语法
当使用结尾逗号时,如下所示:
create table person(
name varchar(50),
); -- ↑ A trailing comma
所以,我删除了结尾的逗号,如下所示,然后错误就解决了:
create table person(
name varchar(50)
); -- ↑ No trailing comma
而且,我也遇到了以下相同的错误:
ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“count( num int )”附近使用的语法
当
count
和(
之间没有空格时,如下所示,因为它被识别为MySQL内置函数count():
-- No space
↓
create table count(
num int
);
所以,我在
count
和(
之间留了一个空格,如下所示,然后错误就解决了:
-- Make a space
↓
create table count (
num int
);
而且,我也遇到了以下相同的错误:
ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行 'person TO 'john'@'localhost'' 附近使用的语法
当我通过用户 person
登录,通过
GRANT将所有数据库 (
*.person
) 中的 john
表的 PROCESS 权限授予用户 root
,如下所示:
GRANT PROCESS ON *.person TO 'john'@'localhost';
因此,我对所有数据库中的所有表(
PROCESS
)赋予了*.*
权限,如下所示,然后我就可以解决该错误。 *我的回答解释更多:
GRANT PROCESS ON *.* TO 'john'@'localhost';